3 Commits
1.9 ... 0.0.2

Author SHA1 Message Date
Job Snijders
d7535af404 Update contact details 2019-12-14 14:59:46 +01:00
Job Snijders
2b11a71384 New release 2019-12-14 14:49:37 +01:00
Christian David
c6b8a6f842 Add support for Mikrotik 2019-12-14 14:48:01 +01:00
7 changed files with 87 additions and 11 deletions

View File

@@ -90,6 +90,10 @@ Generate config for Juniper (default: Cisco).
Generate output in JSON format (default: Cisco).
#### -K
Generate config for MikroTik (default: Cisco).
#### -m `length`
Maximum length of accepted prefixes (default: `32` for IPv4, `128` for IPv6).
@@ -178,6 +182,19 @@ expansion from future expansion.
EXAMPLES
--------
Generating prefix filter for MikroTik for `AS20597`:
user@host:~>./bgpq4 -Kl eltel AS20597
/routing filter add action=accept chain="eltel-V4" prefix=81.9.0.0/20
/routing filter add action=accept chain="eltel-V4" prefix=81.9.32.0/20
/routing filter add action=accept chain="eltel-V4" prefix=81.9.96.0/20
/routing filter add action=accept chain="eltel-V4" prefix=81.222.128.0/20
/routing filter add action=accept chain="eltel-V4" prefix=81.222.160.0/20
/routing filter add action=accept chain="eltel-V4" prefix=81.222.192.0/18
/routing filter add action=accept chain="eltel-V4" prefix=85.249.8.0/21
/routing filter add action=accept chain="eltel-V4" prefix=85.249.224.0/19
/routing filter add action=accept chain="eltel-V4" prefix=89.112.0.0/17
/routing filter add action=accept chain="eltel-V4" prefix=217.170.64.0/19
Generating named Juniper prefix-filter for `AS20597`:
@@ -354,13 +371,14 @@ SEE ALSO
for information on Cisco implementation of ASN32.
4. [JunOS prefix-lists limitation](http://www.juniper.net/techpubs/en_US/junos11.4/topics/reference/configuration-statement/prefix-list-edit-policy-options.html)
AUTHOR
------
AUTHORS
-------
Job Snijders [job@ntt.net](mailto:job@ntt.net)
Alexandre Snarskii [snar@snar.spb.ru](mailto:snar@snar.spb.ru)
Program Homepage
----------------
[http://snar.spb.ru/prog/bgpq4/](http://snar.spb.ru/prog/bgpq4/)
[https://github.com/bgp/bgpq4](https://github.com/bgp/bgpq4)

View File

@@ -93,6 +93,8 @@ host running IRRD database (default: rr.ntt.net).
generate config for Juniper (default: Cisco).
.It Fl j
generate output in JSON format (default: Cisco).
.It Fl K
generate config for Mikrotik (default: Cisco).
.It Fl l Ar name
name of generated entry.
.It Fl L Ar limit
@@ -296,5 +298,6 @@ Routing Arbiter project
for information on 'asdot' and 'asplain' notations.
.Sy http://www.cisco.com/en/US/docs/ios/12_0s/release/ntes/120SNEWF.html#wp3521658
for information on Cisco implementation of ASN32.
.Sh AUTHOR
.Sh AUTHORS
.An Job Snijders Aq job@ntt.net
.An Alexandre Snarskii Aq snar@snar.spb.ru

View File

@@ -50,6 +50,7 @@ usage(int ecode)
" (use host:port to specify alternate port)\n");
printf(" -J : generate config for JunOS (Cisco IOS by default)\n");
printf(" -j : generate JSON output (Cisco IOS by default)\n");
printf(" -K : generate config for MikroTik RouterOS (Cisco IOS by default)\n");
printf(" -M match : extra match conditions for JunOS route-filters\n");
printf(" -m len : maximum prefix length (default: 32 for IPv4, "
"128 for IPv6)\n");
@@ -145,7 +146,7 @@ main(int argc, char* argv[])
if (getenv("IRRD_SOURCES"))
expander.sources=getenv("IRRD_SOURCES");
while((c=getopt(argc,argv,"2346a:AbBdDEF:S:jJf:l:L:m:M:NnW:Ppr:R:G:tTh:UwXsz"))
while((c=getopt(argc,argv,"2346a:AbBdDEF:S:jJKf:l:L:m:M:NnW:Ppr:R:G:tTh:UwXsz"))
!=EOF) {
switch(c) {
case '2':
@@ -223,6 +224,9 @@ main(int argc, char* argv[])
case 'j': if(expander.vendor) vendor_exclusive();
expander.vendor=V_JSON;
break;
case 'K': if(expander.vendor) vendor_exclusive();
expander.vendor=V_MIKROTIK;
break;
case 'p':
expand_special_asn=1;
break;
@@ -348,6 +352,8 @@ main(int argc, char* argv[])
expander.aswidth=6;
} else if(expander.vendor==V_JUNIPER) {
expander.aswidth=8;
} else if(expander.vendor==V_MIKROTIK) {
expander.aswidth=4;
} else if(expander.vendor==V_BIRD) {
expander.aswidth=10;
} else if(expander.vendor==V_NOKIA || expander.vendor==V_NOKIA_MD) {

View File

@@ -20,6 +20,7 @@ typedef enum {
V_FORMAT,
V_NOKIA,
V_HUAWEI,
V_MIKROTIK,
V_NOKIA_MD
} bgpq_vendor_t;

View File

@@ -1387,6 +1387,52 @@ bgpq4_print_nokia_md_ipprefixlist(FILE* f, struct bgpq_expander* b)
return 0;
};
void
bgpq4_print_kprefix(struct sx_radix_node* n, void* ff)
{
char prefix[128];
FILE* f=(FILE*)ff;
if(!f) f=stdout;
if(n->isGlue) goto checkSon;
sx_prefix_snprintf_sep(&n->prefix,prefix,sizeof(prefix),"/");
if(n->isAggregate) {
if(n->aggregateLow>n->prefix.masklen) {
fprintf(f,"/routing filter add action=accept chain=\"%s-%s\" prefix=%s prefix-length=%d-%d\n",
bname?bname:"NN",
n->prefix.family==AF_INET?"V4":"V6",
prefix,
n->aggregateLow,
n->aggregateHi);
} else {
fprintf(f,"/routing filter add action=accept chain=\"%s-%s\" prefix=%s prefix-length=%d\n",
bname?bname:"NN",
n->prefix.family==AF_INET?"V4":"V6",
prefix,
n->aggregateHi);
};
} else {
fprintf(f,"/routing filter add action=accept chain=\"%s-%s\" prefix=%s\n",
bname?bname:"NN",
n->prefix.family==AF_INET?"V4":"V6",
prefix);
};
checkSon:
if(n->son)
bgpq4_print_kprefix(n->son,ff);
};
int
bgpq4_print_mikrotik_prefixlist(FILE* f, struct bgpq_expander* b)
{
bname=b->name ? b->name : "NN";
if (!sx_radix_tree_empty(b->tree)) {
sx_radix_tree_foreach(b->tree,bgpq4_print_kprefix,f);
} else {
fprintf(f, "# generated prefix-list %s is empty\n", bname);
};
return 0;
};
int
bgpq4_print_prefixlist(FILE* f, struct bgpq_expander* b)
{
@@ -1401,6 +1447,7 @@ bgpq4_print_prefixlist(FILE* f, struct bgpq_expander* b)
case V_NOKIA: return bgpq4_print_nokia_prefixlist(f,b);
case V_NOKIA_MD: return bgpq4_print_nokia_md_ipprefixlist(f,b);
case V_HUAWEI: return bgpq4_print_huawei_prefixlist(f,b);
case V_MIKROTIK: return bgpq4_print_mikrotik_prefixlist(f,b);
};
return 0;
};
@@ -1418,6 +1465,7 @@ bgpq4_print_eacl(FILE* f, struct bgpq_expander* b)
case V_FORMAT: sx_report(SX_FATAL, "unreachable point\n");
case V_NOKIA: return bgpq4_print_nokia_ipprefixlist(f,b);
case V_NOKIA_MD: return bgpq4_print_nokia_md_prefixlist(f,b);
case V_MIKROTIK: return sx_report(SX_FATAL, "unreachable point\n");
case V_HUAWEI: return sx_report(SX_FATAL, "unreachable point\n");
};
return 0;

10
configure vendored
View File

@@ -2,7 +2,7 @@
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for bgpq4 0.1.35.
#
# Report bugs to <snar@snar.spb.ru>.
# Report bugs to job@ntt.net
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='bgpq4'
PACKAGE_TARNAME='bgpq4'
PACKAGE_VERSION='0.0.1'
PACKAGE_STRING='bgpq4 0.0.1'
PACKAGE_VERSION='0.0.2'
PACKAGE_STRING='bgpq4 0.0.2'
PACKAGE_BUGREPORT='job@ntt.net'
PACKAGE_URL='https://github.com/bgp/bgpq4'
@@ -1306,7 +1306,7 @@ Some influential environment variables:
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
Report bugs to <snar@snar.spb.ru>.
Report bugs to <job@ntt.net>.
_ACEOF
ac_status=$?
fi
@@ -4164,7 +4164,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
bgpq4 config.status 0.0.1
bgpq4 config.status 0.0.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@@ -1,4 +1,4 @@
AC_INIT(bgpq4,0.0.1,job@ntt.net)
AC_INIT(bgpq4,0.0.2,job@ntt.net)
AC_CONFIG_HEADER(config.h)
AC_PROG_CC
AC_PROG_INSTALL