Minor cleanups

BTW, 'prefices' is hypercorrection, as 'prefix' is from 'praefixum' with
plural 'praefixa'.
This commit is contained in:
Ondrej Zajicek (work) 2017-03-14 17:18:50 +01:00
parent 8c9986d310
commit a5d2a34497
3 changed files with 22 additions and 21 deletions

View file

@ -1196,27 +1196,29 @@ foot).
This type can hold a network prefix consisting of IP address, prefix This type can hold a network prefix consisting of IP address, prefix
length and several other values. This is the key in route tables. length and several other values. This is the key in route tables.
Prefices may be of several types, which can be determined by the special Prefixes may be of several types, which can be determined by the special
operator <cf/.type/ of type <m/enum/. The type may be: operator <cf/.type/. The type may be:
<cf/NET_IP4/ and <cf/NET_IP6/ prefices hold an IP prefix. The literals are <cf/NET_IP4/ and <cf/NET_IP6/ prefixes hold an IP prefix. The literals
written as <cf><m/ipaddress//<m/pxlen/</cf>, are written as <cf><m/ipaddress//<m/pxlen/</cf>,
or <cf><m>ipaddress</m>/<m>netmask</m></cf>. There are two special or <cf><m>ipaddress</m>/<m>netmask</m></cf>. There are two special
operators on IP prefices: <cf/.ip/ which extracts the IP address from the operators on IP prefixes: <cf/.ip/ which extracts the IP address from
pair, and <cf/.len/, which separates prefix length from the pair. the pair, and <cf/.len/, which separates prefix length from the pair.
So <cf>1.2.0.0/16.len = 16</cf> is true. So <cf>1.2.0.0/16.len = 16</cf> is true.
<cf/NET_VPN4/ and <cf/NET_VPN6/ prefices hold an IP prefix with <cf/NET_VPN4/ and <cf/NET_VPN6/ prefixes hold an IP prefix with VPN
VPN Route Distinguisher (<rfc id="4364">). They support the same special Route Distinguisher (<rfc id="4364">). They support the same special
operators as IP prefices, and also <cf/.rd/ which extracts the Route Distinguisher. operators as IP prefixes, and also <cf/.rd/ which extracts the Route
Their literals are written as <cf><m/vpnrd/ <m/ipprefix/</cf> Distinguisher. Their literals are written
as <cf><m/vpnrd/ <m/ipprefix/</cf>
<cf/NET_ROA4/ and <cf/NET_ROA6/ prefices hold an IP prefix range together <cf/NET_ROA4/ and <cf/NET_ROA6/ prefixes hold an IP prefix range
with an ASN. They support the same special operators as IP prefices, and also together with an ASN. They support the same special operators as IP
<cf/.maxlen/ which extracts maximal prefix length, and <cf/.asn/ which extracts the ASN. prefixes, and also <cf/.maxlen/ which extracts maximal prefix length,
and <cf/.asn/ which extracts the ASN.
<cf/NET_FLOW4/ and <cf/NET_FLOW6/ hold an IP prefix together with <cf/NET_FLOW4/ and <cf/NET_FLOW6/ hold an IP prefix together with a
a flowspec rule. Filters currently don't support flowspec parsing. flowspec rule. Filters currently don't support flowspec parsing.
<tag><label id="type-ec">ec</tag> <tag><label id="type-ec">ec</tag>
This is a specialized type used to represent BGP extended community This is a specialized type used to represent BGP extended community

View file

@ -1227,11 +1227,10 @@ interpret(struct f_inst *what)
ONEARG; ONEARG;
if (v1.type != T_NET) if (v1.type != T_NET)
runtime( "Prefix expected" ); runtime( "Prefix expected" );
res.type = T_RD; if (!net_is_vpn(v1.val.net))
if ((1 << v1.val.net->type) & (NB_VPN4 | NB_VPN6))
res.val.ec = net_rd(v1.val.net);
else
runtime( "VPN address expected" ); runtime( "VPN address expected" );
res.type = T_RD;
res.val.ec = net_rd(v1.val.net);
break; break;
case P('a','f'): /* Get first ASN from AS PATH */ case P('a','f'): /* Get first ASN from AS PATH */
ONEARG; ONEARG;

View file

@ -81,14 +81,14 @@ net_format(const net_addr *N, char *buf, int buflen)
case NET_VPN4: case NET_VPN4:
{ {
int c = rd_format(n->vpn4.rd, buf, buflen); int c = rd_format(n->vpn4.rd, buf, buflen);
buf += c; buflen -= c; ADVANCE(buf, buflen, c);
return bsnprintf(buf, buflen, " %I4/%d", n->vpn4.prefix, n->vpn4.pxlen); return bsnprintf(buf, buflen, " %I4/%d", n->vpn4.prefix, n->vpn4.pxlen);
} }
case NET_VPN6: case NET_VPN6:
{ {
/* XXX: RD format is specified for VPN4; not found any for VPN6, reusing the same as for VPN4 */ /* XXX: RD format is specified for VPN4; not found any for VPN6, reusing the same as for VPN4 */
int c = rd_format(n->vpn6.rd, buf, buflen); int c = rd_format(n->vpn6.rd, buf, buflen);
buf += c; buflen -= c; ADVANCE(buf, buflen, c);
return bsnprintf(buf, buflen, " %I6/%d", n->vpn6.prefix, n->vpn6.pxlen); return bsnprintf(buf, buflen, " %I6/%d", n->vpn6.prefix, n->vpn6.pxlen);
} }
case NET_ROA4: case NET_ROA4: