]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: Restrict redistribution cli a bit
authorDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 13 Apr 2018 13:39:23 +0000 (09:39 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 13 Apr 2018 16:56:19 +0000 (12:56 -0400)
The PBR and PIM daemons, needed the ability to connect
to zebra.  Unfortunately this connection also implied
an ability to redistribute to other valid protocols.

Add a additional hook to the route_types.pl script
to allow us to specify if the client type should
be redistributed at all.

Additionally cleanup the PIM code to not show up
as a protocol under the header for a 'show ip route'
command

Ticket: CM-20568
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/route_types.pl
lib/route_types.txt

index 9d50acaaeda8bb9c9e9e6a0a85cd00680e73d605..66384fe4492af8e3f59037dbf7c178557308e295 100755 (executable)
@@ -54,15 +54,15 @@ while (<STDIN>) {
 
        $_ =~ s/\s*,\s*/,/g;
 
-       # else: 7-field line
+       # else: 8-field line
        my @f = split(/,/, $_);
-       unless (@f == 7 || @f == 8) {
+       unless (@f == 8 || @f == 9) {
                die "invalid input on route_types line $.\n";
        }
 
        my $proto = $f[0];
        $f[3] = $1 if ($f[3] =~ /^'(.*)'$/);
-       $f[6] = $1 if ($f[6] =~ /^"(.*)"$/);
+       $f[7] = $1 if ($f[7] =~ /^"(.*)"$/);
 
        $protodetail{$proto} = {
                "number" => scalar @protos,
@@ -72,8 +72,9 @@ while (<STDIN>) {
                "char" => $f[3],
                "ipv4" => int($f[4]),
                "ipv6" => int($f[5]),
-               "shorthelp" => $f[6],
-               "restrict2" => $f[7],
+               "redist" => int($f[6]),
+               "shorthelp" => $f[7],
+               "restrict2" => $f[8],
        };
        push @protos, $proto;
        $daemons{$f[2]} = {
@@ -136,8 +137,9 @@ sub collect {
                next if ($protodetail{$p}->{"daemon"} eq $daemon && $daemon ne "zebra");
                next if ($protodetail{$p}->{"restrict2"} ne "" && 
                         $protodetail{$p}->{"restrict2"} ne $daemon);
+               next if ($protodetail{$p}->{"redist"} eq 0);
                next unless (($ipv4 && $protodetail{$p}->{"ipv4"})
-                               || ($ipv6 && $protodetail{$p}->{"ipv6"}));
+                            || ($ipv6 && $protodetail{$p}->{"ipv6"}));
                push @names, $protodetail{$p}->{"cname"};
                push @help, "  \"".$protodetail{$p}->{"longhelp"}."\\n\"";
        }
index 91eaf94d958bbf4c0854131f54217d89a82d4992..cfa55e468cd328b4fdb55bc36de93aa2a7419866 100644 (file)
@@ -7,8 +7,8 @@
 # Lines /beginning/ with # are comments.
 #
 ####
-# 7 field line has format:
-# ZServ route type, canonical name, daemon, route char, ipv4, ipv6, short desc
+# 9 field line has format:
+# ZServ route type, canonical name, daemon, route char, ipv4, ipv6, redist, short desc, Restrictions
 #
 # Zserv route type:    Corresponding with zebra.h. Key field.
 # canonical name:      Typically derived from the route type definition.
 #                      'X' is reserved as the 'not needed' placeholder.
 # ipv4:                        IPv4 capable? yes/no, or 1/0.
 # ipv6:                        IPv6 capable? ditto.
+# redist:               Allow this protocol to be used in redistribution statements
 # short desc:          Very brief description. Used in header of
 #                      'show ip route'. May be specified as NULL
 #                      if the canonical name suffices.
+# Restriction:          If this cannot be used with the listed protocol for redistribution events
 #
 # Key fields obviously must be a unique ASCII alpha-numeric word.
 #   Lower-case is required, brevity is optional but highly desirable.
 # If you add a new routing protocol here, make sure you also update
 # meta_queue_map in zebra_rib.c
 #
-##  type                cname      daemon  C    4  6  short help
-ZEBRA_ROUTE_SYSTEM,     system,    NULL,   'X', 0, 0, "Reserved"
-ZEBRA_ROUTE_KERNEL,     kernel,    zebra,  'K', 1, 1, "kernel route"
-ZEBRA_ROUTE_CONNECT,    connected, zebra,  'C', 1, 1, "connected"
-ZEBRA_ROUTE_STATIC,     static,    zebra,  'S', 1, 1, "static"
-ZEBRA_ROUTE_RIP,        rip,       ripd,   'R', 1, 0, "RIP"
-ZEBRA_ROUTE_RIPNG,      ripng,     ripngd, 'R', 0, 1, "RIPng"
-ZEBRA_ROUTE_OSPF,       ospf,      ospfd,  'O', 1, 0, "OSPF"
-ZEBRA_ROUTE_OSPF6,      ospf6,     ospf6d, 'O', 0, 1, "OSPFv3"
-ZEBRA_ROUTE_ISIS,       isis,      isisd,  'I', 1, 1, "IS-IS"
-ZEBRA_ROUTE_BGP,        bgp,       bgpd,   'B', 1, 1, "BGP"
-ZEBRA_ROUTE_PIM,       pim,       pimd,   'P', 1, 0, "PIM"
-ZEBRA_ROUTE_EIGRP,      eigrp,     eigrpd, 'E', 1, 0, "EIGRP"
-ZEBRA_ROUTE_NHRP,       nhrp,      nhrpd,  'N', 1, 1, "NHRP"
+##  type                cname      daemon  C    4  6  Redist short help  Restrictions
+ZEBRA_ROUTE_SYSTEM,     system,    NULL,   'X', 0, 0, 0,     "Reserved"
+ZEBRA_ROUTE_KERNEL,     kernel,    zebra,  'K', 1, 1, 1,     "kernel route"
+ZEBRA_ROUTE_CONNECT,    connected, zebra,  'C', 1, 1, 1,     "connected"
+ZEBRA_ROUTE_STATIC,     static,    zebra,  'S', 1, 1, 1,     "static"
+ZEBRA_ROUTE_RIP,        rip,       ripd,   'R', 1, 0, 1,     "RIP"
+ZEBRA_ROUTE_RIPNG,      ripng,     ripngd, 'R', 0, 1, 1,     "RIPng"
+ZEBRA_ROUTE_OSPF,       ospf,      ospfd,  'O', 1, 0, 1,     "OSPF"
+ZEBRA_ROUTE_OSPF6,      ospf6,     ospf6d, 'O', 0, 1, 1,     "OSPFv3"
+ZEBRA_ROUTE_ISIS,       isis,      isisd,  'I', 1, 1, 1,     "IS-IS"
+ZEBRA_ROUTE_BGP,        bgp,       bgpd,   'B', 1, 1, 1,     "BGP"
+ZEBRA_ROUTE_PIM,       pim,       pimd,   'P', 0, 0, 0,     "PIM"
+ZEBRA_ROUTE_EIGRP,      eigrp,     eigrpd, 'E', 1, 0, 1,     "EIGRP"
+ZEBRA_ROUTE_NHRP,       nhrp,      nhrpd,  'N', 1, 1, 1,     "NHRP"
 # HSLS and OLSR both are AFI independent (so: 1, 1), however
 # we want to disable for them for general Quagga distribution.
 # This at least makes it trivial for users of these protocols
 # to 'switch on' redist support (direct numeric entry remaining
 # possible).
-ZEBRA_ROUTE_HSLS,       hsls,      hslsd,  'H', 0, 0, "HSLS"
-ZEBRA_ROUTE_OLSR,       olsr,      olsrd,  'o', 0, 0, "OLSR"
-ZEBRA_ROUTE_TABLE,      table,     zebra,  'T', 1, 1, "Table"
-ZEBRA_ROUTE_LDP,        ldp,       ldpd,   'L', 0, 0, "LDP"
+ZEBRA_ROUTE_HSLS,       hsls,      hslsd,  'H', 0, 0, 0,     "HSLS"
+ZEBRA_ROUTE_OLSR,       olsr,      olsrd,  'o', 0, 0, 0,     "OLSR"
+ZEBRA_ROUTE_TABLE,      table,     zebra,  'T', 1, 1, 1,     "Table"
+ZEBRA_ROUTE_LDP,        ldp,       ldpd,   'L', 0, 0, 0,     "LDP"
 #vnc when sent to zebra 
-ZEBRA_ROUTE_VNC,        vnc,       NULL,   'v', 1, 1, "VNC"
+ZEBRA_ROUTE_VNC,        vnc,       NULL,   'v', 1, 1, 1,     "VNC"
 # vnc when sent to bgp
-ZEBRA_ROUTE_VNC_DIRECT, vnc-direct,NULL,   'V', 1, 1, "VNC-Direct", bgpd
+ZEBRA_ROUTE_VNC_DIRECT, vnc-direct,NULL,   'V', 1, 1, 1,     "VNC-Direct", bgpd
 # vnc when sent to bgp (resolve NVE mode)
-ZEBRA_ROUTE_VNC_DIRECT_RH, vnc-rn, NULL,   'V', 0, 0, "VNC-RN"
+ZEBRA_ROUTE_VNC_DIRECT_RH, vnc-rn, NULL,   'V', 0, 0, 0,     "VNC-RN"
 #  bgp unicast -> vnc 
-ZEBRA_ROUTE_BGP_DIRECT, bgp-direct, NULL,  'b', 0, 0, "BGP-Direct"
+ZEBRA_ROUTE_BGP_DIRECT, bgp-direct, NULL,  'b', 0, 0, 0,     "BGP-Direct"
 #  bgp unicast -> vnc 
-ZEBRA_ROUTE_BGP_DIRECT_EXT, bgp-direct-to-nve-groups, NULL, 'e', 0, 0, "BGP2VNC"
-ZEBRA_ROUTE_BABEL,      babel,     babeld, 'A', 1, 1, "Babel"
-ZEBRA_ROUTE_SHARP,    sharp,     sharpd, 'D', 1, 1, "SHARP"
-ZEBRA_ROUTE_PBR,      pbr,       pbrd, 'F', 1, 1, "PBR"
-ZEBRA_ROUTE_ALL,        wildcard,  none,   '-', 0, 0, "-"
+ZEBRA_ROUTE_BGP_DIRECT_EXT, bgp-direct-to-nve-groups, NULL, 'e', 0, 0, 0, "BGP2VNC"
+ZEBRA_ROUTE_BABEL,      babel,     babeld, 'A', 1, 1, 1,     "Babel"
+ZEBRA_ROUTE_SHARP,      sharp,     sharpd, 'D', 1, 1, 1,     "SHARP"
+ZEBRA_ROUTE_PBR,        pbr,       pbrd,   'F', 1, 1, 0,     "PBR"
+ZEBRA_ROUTE_ALL,        wildcard,  none,   '-', 0, 0, 0,     "-"
 
 
 ## help strings