client.as.number
INTEGER, read-only.
Available inall subroutines.
Autonomous system (AS) number.
TheINTEGER type in VCL iswide enoughto 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 aSTRING type)will give anasplain representation of the number, which is just its base 10representation.
RFC 5396 introduces theasdot+ format,which represents a 32-bit AS number as two 16-bit parts.The following VCL illustrates constructing anasdot+ formatted number:
sub client_asn_dotplusSTRING {declare local var.hiINTEGER;declare local var.loINTEGER;declare local var.sSTRING;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 byRFC 5398 for documentation use)is rendered as1.14.
Several ranges of AS numbers are reserved for various purposes. The followingVCL fragment illustrates categorizing AS numbers into these ranges:
sub client_asn_categorySTRING {declare local var.asn_categorySTRING;if (client.as.number<0||client.as.number>0xFFFFFFFF) {set var.asn_category="invalid"; }elseif (client.as.number==0) {set var.asn_category="reserved";# RFC 1930 }elseif (client.as.number<=23455) {set var.asn_category="public"; }elseif (client.as.number==23456) {set var.asn_category="transition";# RFC 6793 }elseif (client.as.number<=64534) {set var.asn_category="public"; }elseif (client.as.number<=64495) {set var.asn_category="reserved"; }elseif (client.as.number<=64511) {set var.asn_category="documentation";# RFC 5398 }elseif (client.as.number<=65534) {set var.asn_category="private"; }elseif (client.as.number==65535) {set var.asn_category="reserved"; }elseif (client.as.number<=65551) {set var.asn_category="documentation";# RFC 4893, RFC 5398 }elseif (client.as.number<=131071) {set var.asn_category="reserved"; }elseif (client.as.number<=4199999999) {set var.asn_category="public"; }elseif (client.as.number<=4294967294) {set var.asn_category="private";# RFC 6996 }elseif (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 code examples. Examples apply VCL to real-world use cases and can be deployed as they are, or adapted for your own service. See thefull list of code examples for 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.