add support for Mikrotik ROSv7 filters (#72)

* add support for Mikrotik ROSv7 filters

* Rework Mikrotik ROSv7 option

- Use same option key with a modifier
- avoid some code duplication

* update doc

Co-authored-by: Denis <denis@jig-ai.ledeuns.net>
This commit is contained in:
Denis Fondras
2022-11-05 12:06:54 +01:00
committed by GitHub
parent 233380d4e9
commit 2921348a98
5 changed files with 67 additions and 14 deletions

23
main.c
View File

@@ -59,7 +59,8 @@ usage(int ecode)
printf(" -u : Huawei XPL\n");
printf(" -j : JSON\n");
printf(" -J : Juniper Junos\n");
printf(" -K : MikroTik RouterOS\n");
printf(" -K : MikroTik RouterOSv6\n");
printf(" -K7 : MikroTik RouterOSv7\n");
printf(" -b : NIC.CZ BIRD\n");
printf(" -N : Nokia SR OS (Classic CLI)\n");
printf(" -n : Nokia SR OS (MD-CLI)\n");
@@ -132,9 +133,9 @@ static void
vendor_exclusive(void)
{
fprintf(stderr, "-b (BIRD), -B (OpenBGPD), -F (formatted), -J (Junos),"
" -j (JSON), -N (Nokia SR OS Classic), -n (Nokia SR OS MD-CLI),"
" -U (Huawei), -u (Huawei XPL), -e (Arista) and -X (IOS XR) options "
" are mutually exclusive\n");
" -j (JSON), -K[7] (Microtik ROS), -N (Nokia SR OS Classic),"
" -n (Nokia SR OS MD-CLI), -U (Huawei), -u (Huawei XPL),"
"-e (Arista) and -X (IOS XR) options are mutually exclusive\n");
exit(1);
}
@@ -196,7 +197,7 @@ main(int argc, char* argv[])
expander.sources=getenv("IRRD_SOURCES");
while ((c = getopt(argc, argv,
"46a:AbBdDEeF:S:jJKf:l:L:m:M:NnW:r:R:G:H:tTh:UuwXsvz")) != EOF) {
"467a:AbBdDEeF:S:jJKf:l:L:m:M:NnW:r:R:G:H:tTh:UuwXsvz")) != EOF) {
switch (c) {
case '4':
/* do nothing, expander already configured for IPv4 */
@@ -217,6 +218,13 @@ main(int argc, char* argv[])
expander.family = AF_INET6;
expander.tree->family = AF_INET6;
break;
case '7':
if (expander.vendor != V_MIKROTIK6) {
sx_report(SX_FATAL, "'7' can only be used after -K\n");
exit(1);
}
expander.vendor = V_MIKROTIK7;
break;
case 'a':
parseasnumber(&expander, optarg);
break;
@@ -296,7 +304,7 @@ main(int argc, char* argv[])
case 'K':
if (expander.vendor)
vendor_exclusive();
expander.vendor = V_MIKROTIK;
expander.vendor = V_MIKROTIK6;
break;
case 'r':
refineLow = strtoul(optarg, NULL, 10);
@@ -447,7 +455,8 @@ main(int argc, char* argv[])
switch (vendor) {
case V_ARISTA:
case V_CISCO:
case V_MIKROTIK:
case V_MIKROTIK6:
case V_MIKROTIK7:
expander.aswidth = 4;
break;
case V_CISCO_XR: