summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2017-03-14 17:18:50 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2017-03-14 17:25:42 +0100
commita5d2a34497853a02692a0b8ea812f44d6820a399 (patch)
treec4aa68637722e863c7cd13fa26228fdf98f8cdc3
parent8c9986d310c58b26c000375be00be0deb9c2e360 (diff)
Minor cleanups
BTW, 'prefices' is hypercorrection, as 'prefix' is from 'praefixum' with plural 'praefixa'.
-rw-r--r--doc/bird.sgml32
-rw-r--r--filter/filter.c7
-rw-r--r--lib/net.c4
3 files changed, 22 insertions, 21 deletions
diff --git a/doc/bird.sgml b/doc/bird.sgml
index e85ebf18..761c5396 100644
--- a/doc/bird.sgml
+++ b/doc/bird.sgml
@@ -1196,27 +1196,29 @@ foot).
This type can hold a network prefix consisting of IP address, prefix
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
- operator <cf/.type/ of type <m/enum/. The type may be:
+ Prefixes may be of several types, which can be determined by the special
+ operator <cf/.type/. The type may be:
- <cf/NET_IP4/ and <cf/NET_IP6/ prefices hold an IP prefix. The literals are
- written as <cf><m/ipaddress//<m/pxlen/</cf>,
+ <cf/NET_IP4/ and <cf/NET_IP6/ prefixes hold an IP prefix. The literals
+ are written as <cf><m/ipaddress//<m/pxlen/</cf>,
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
- pair, and <cf/.len/, which separates prefix length from the pair.
+ operators on IP prefixes: <cf/.ip/ which extracts the IP address from
+ the pair, and <cf/.len/, which separates prefix length from the pair.
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
- VPN Route Distinguisher (<rfc id="4364">). They support the same special
- operators as IP prefices, and also <cf/.rd/ which extracts the Route Distinguisher.
- Their literals are written as <cf><m/vpnrd/ <m/ipprefix/</cf>
+ <cf/NET_VPN4/ and <cf/NET_VPN6/ prefixes hold an IP prefix with VPN
+ Route Distinguisher (<rfc id="4364">). They support the same special
+ operators as IP prefixes, and also <cf/.rd/ which extracts the Route
+ 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
- with an ASN. They support the same special operators as IP prefices, and also
- <cf/.maxlen/ which extracts maximal prefix length, and <cf/.asn/ which extracts the ASN.
+ <cf/NET_ROA4/ and <cf/NET_ROA6/ prefixes hold an IP prefix range
+ together with an ASN. They support the same special operators as IP
+ 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
- a flowspec rule. Filters currently don't support flowspec parsing.
+ <cf/NET_FLOW4/ and <cf/NET_FLOW6/ hold an IP prefix together with a
+ flowspec rule. Filters currently don't support flowspec parsing.
<tag><label id="type-ec">ec</tag>
This is a specialized type used to represent BGP extended community
diff --git a/filter/filter.c b/filter/filter.c
index a3caaf96..616f9e2a 100644
--- a/filter/filter.c
+++ b/filter/filter.c
@@ -1227,11 +1227,10 @@ interpret(struct f_inst *what)
ONEARG;
if (v1.type != T_NET)
runtime( "Prefix expected" );
- res.type = T_RD;
- if ((1 << v1.val.net->type) & (NB_VPN4 | NB_VPN6))
- res.val.ec = net_rd(v1.val.net);
- else
+ if (!net_is_vpn(v1.val.net))
runtime( "VPN address expected" );
+ res.type = T_RD;
+ res.val.ec = net_rd(v1.val.net);
break;
case P('a','f'): /* Get first ASN from AS PATH */
ONEARG;
diff --git a/lib/net.c b/lib/net.c
index 2bf4049e..c29ed299 100644
--- a/lib/net.c
+++ b/lib/net.c
@@ -81,14 +81,14 @@ net_format(const net_addr *N, char *buf, int buflen)
case NET_VPN4:
{
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);
}
case NET_VPN6:
{
/* 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);
- buf += c; buflen -= c;
+ ADVANCE(buf, buflen, c);
return bsnprintf(buf, buflen, " %I6/%d", n->vpn6.prefix, n->vpn6.pxlen);
}
case NET_ROA4: