client.as.number

INTEGER, read-only.

Available in all subroutines.

Autonomous system (AS) number.

The INTEGER type in VCL is wide enough to support the full range of 32-bit AS numbers.

Converting to asdot+ format

Formatting these numbers to base 10 (e.g., by implicit conversion to a STRING type) will give an asplain representation of the number, which is just its base 10 representation.

RFC 5396 introduces the asdot+ format, which represents a 32-bit AS number as two 16-bit parts. The following VCL illustrates constructing an asdot+ formatted number:

sub client_asn_dotplus STRING {
declare local var.hi INTEGER;
declare local var.lo INTEGER;
declare local var.s STRING;
set var.hi = client.as.number;
set var.hi >>= 16;
set var.lo = client.as.number;
set var.lo &= 0xFFFF;
set var.s = client.as.number ": " var.hi "." var.lo;
return var.s;
}

Examples

The 32-bit AS number 65550 (reserved by RFC 5398 for documentation use) is rendered as 1.14.

Several ranges of AS numbers are reserved for various purposes. The following VCL fragment illustrates categorizing AS numbers into these ranges:

sub client_asn_category STRING {
declare local var.asn_category STRING;
if (client.as.number < 0 || client.as.number > 0xFFFFFFFF) {
set var.asn_category = "invalid";
} else if (client.as.number == 0) {
set var.asn_category = "reserved"; # RFC 1930
} else if (client.as.number <= 23455) {
set var.asn_category = "public";
} else if (client.as.number == 23456) {
set var.asn_category = "transition"; # RFC 6793
} else if (client.as.number <= 64534) {
set var.asn_category = "public";
} else if (client.as.number <= 64495) {
set var.asn_category = "reserved";
} else if (client.as.number <= 64511) {
set var.asn_category = "documentation"; # RFC 5398
} else if (client.as.number <= 65534) {
set var.asn_category = "private";
} else if (client.as.number == 65535) {
set var.asn_category = "reserved";
} else if (client.as.number <= 65551) {
set var.asn_category = "documentation"; # RFC 4893, RFC 5398
} else if (client.as.number <= 131071) {
set var.asn_category = "reserved";
} else if (client.as.number <= 4199999999) {
set var.asn_category = "public";
} else if (client.as.number <= 4294967294) {
set var.asn_category = "private"; # RFC 6996
} else if (client.as.number == 4294967295) {
set var.asn_category = "reserved";
} else {
set var.asn_category = "unknown";
}
return var.asn_category;
}

Try it out

client.as.number is used in the following solution recipes. Recipes apply VCL to real-world use cases and can be deployed as-is, or adapted for your own service. See the full list of recipesfor more inspiration.

Click RUN on a sample below to provision a Fastly service, execute the code on Fastly, and see how the function behaves.

Comprehensive logging

Fastly offers a myriad of different variables that you can log. See and test a large collection here.

User contributed notes

We welcome comments that add use cases, ideas, tips, and caveats. All comments will be moderated before publication. To post support questions, visit our support center and we'll find you the help you need.