summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPaul Jakma <paul.jakma@sun.com>2007-05-02 16:05:35 +0000
committerPaul Jakma <paul.jakma@sun.com>2007-05-02 16:05:35 +0000
commit7514fb7739f74311830e9ddd1381d0d228224f61 (patch)
tree4d4b9a4fdfcea4cb6fa496085327f1aae9a9a380 /lib
parent5fa05099567bbe42aae87a9bef8fd630b3666a4d (diff)
[zebra] Routemap support on received routes, with 'set src' command (linux)
2007-05-01 David L Stevens <dlstevens@us.ibm.com> * (general) These changes collectively add route-map and prefix-list support to zebra and fix a bug in "show route-map" (with no argument). * doc/main.texi: added route-map, prefix-list, ip protocol and set src documentation * lib/command.h: added PROTOCOL_NODE type * lib/log.c: (proto_name2num) new function, protocol name to number translation. * lib/routemap.c: (vty_show_route_map) fixed "show route-map" without route-map name * lib/routemap.h: added RMAP_ZEBRA type * lib/zebra.h: added proto_name2num() prototype * vtysh/extract.pl.in: added VTYSH_ZEBRA flag for route-map and plist * vtysh/Makefile.am: added zebra_routemap.c * vtysh/vtysh.h: added VTYSH_ZEBRA flag to VTYSH_RMAP * zebra/connected.c: (connected_up_ipv4) added src preference argument to rib_add_ipv4() * zebra/kernel_socket.c: (rtm_read) ditto * zebra/main.c: added prefix list initialization * zebra/Makefile.am: added zebra_routemap.c source file * zebra/rib.h: added generic address union "g_addr" and use in existing places that had an explicit union. Added "src" to struct nexthop. Added preferred src arg to nexthop_ipv4_add and rib_add_ipv4. * zebra/rt_netlink.c: (netlink_routing_table) set preferred source on netlink messages. (netlink_route_change) ditto (netlink_route_multipath) ditto. * zebra/rtread_getmsg.c: (handle_route_entry) added (NULL) src to rib_add_ipv4() call. * zebra/rtread_proc.c: (proc_route_read) ditto * zebra/zebra_rib.c: (nexthop_ipv4_add) add src argument. (nexthop_ipv4_ifindex_add) ditto (rib_add_ipv4) ditto (nexthop_active_check) Add route-map processing. * zebra/zebra_routemap.c: new file for zebra route-map commands. * zebra/zebra_vty.c: (ip_protocol_cmd) Apply route-map to protocol (vty_show_ip_route_detail) added "src" printing (vty_show_ip_route) ditto (show_ip_protocol_cmd) new command, list routemaps. (config_write_protocol) write out routemap protocl config. (zebra_vty_init) Install the new routemap protocol commands. * zebra/zserv.c: (zread_ipv4_add) added (NULL) src arg (zebra_init) init zebra route-maps. * zebra/zserv.h: add zebra_route_map_init
Diffstat (limited to 'lib')
-rw-r--r--lib/ChangeLog13
-rw-r--r--lib/command.h1
-rw-r--r--lib/log.c14
-rw-r--r--lib/routemap.c22
-rw-r--r--lib/routemap.h3
-rw-r--r--lib/zebra.h3
6 files changed, 43 insertions, 13 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index f8fdd11e..3787b68c 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,16 @@
+2007-05-01 David L Stevens <dlstevens@us.ibm.com>
+
+ * (general) These changes collectively add route-map and
+ prefix-list support to zebra and fix a bug in "show
+ route-map" (with no argument).
+ * command.h: added PROTOCOL_NODE type
+ * log.c: (proto_name2num) new function, protocol name to
+ number translation.
+ * routemap.c: (vty_show_route_map) fixed "show route-map"
+ without route-map name
+ * routemap.h: added RMAP_ZEBRA type
+ * zebra.h: added proto_name2num() prototype
+
2007-04-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* log.c: (quagga_timestamp) Optimize the subsecond timestamp generation.
diff --git a/lib/command.h b/lib/command.h
index ce18731e..a7253788 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -99,6 +99,7 @@ enum node_type
SMUX_NODE, /* SNMP configuration node. */
DUMP_NODE, /* Packet dump node. */
FORWARDING_NODE, /* IP forwarding node. */
+ PROTOCOL_NODE, /* protocol filtering node */
VTY_NODE /* Vty node. */
};
diff --git a/lib/log.c b/lib/log.c
index 21bf3f2f..cbf76af9 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -886,3 +886,17 @@ zserv_command_string (unsigned int command)
}
return command_types[command].string;
}
+
+#define RTSIZE (sizeof(route_types)/sizeof(route_types[0]))
+
+int
+proto_name2num(const char *s)
+{
+ unsigned i;
+
+ for (i=0; i<RTSIZE; ++i)
+ if (strcasecmp(s, route_types[i].string) == 0)
+ return route_types[i].type;
+ return -1;
+}
+#undef RTSIZE
diff --git a/lib/routemap.c b/lib/routemap.c
index 55cc33c7..58ed09a7 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -268,6 +268,11 @@ vty_show_route_map (struct vty *vty, const char *name)
return CMD_WARNING;
}
}
+ else
+ {
+ for (map = route_map_master.head; map; map = map->next)
+ vty_show_route_map_entry (vty, map);
+ }
return CMD_SUCCESS;
}
@@ -1135,23 +1140,17 @@ ALIAS (no_rmap_onmatch_goto,
"Continue on a different entry within the route-map\n"
"Route-map entry sequence number\n")
-DEFUN (rmap_show,
- rmap_show_cmd,
- "show route-map",
- SHOW_STR
- "route-map information\n")
-{
- return vty_show_route_map (vty, NULL);
-}
-
DEFUN (rmap_show_name,
rmap_show_name_cmd,
- "show route-map WORD",
+ "show route-map [WORD]",
SHOW_STR
"route-map information\n"
"route-map name\n")
{
- return vty_show_route_map (vty, argv[0]);
+ const char *name = NULL;
+ if (argc)
+ name = argv[0];
+ return vty_show_route_map (vty, name);
}
ALIAS (rmap_onmatch_goto,
@@ -1322,6 +1321,5 @@ route_map_init_vty (void)
install_element (RMAP_NODE, &no_rmap_description_cmd);
/* Install show command */
- install_element (ENABLE_NODE, &rmap_show_cmd);
install_element (ENABLE_NODE, &rmap_show_name_cmd);
}
diff --git a/lib/routemap.h b/lib/routemap.h
index c9cf4410..321e1927 100644
--- a/lib/routemap.h
+++ b/lib/routemap.h
@@ -45,7 +45,8 @@ typedef enum
RMAP_RIPNG,
RMAP_OSPF,
RMAP_OSPF6,
- RMAP_BGP
+ RMAP_BGP,
+ RMAP_ZEBRA
} route_map_object_t;
typedef enum
diff --git a/lib/zebra.h b/lib/zebra.h
index 2e2f8cda..85537399 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -444,6 +444,9 @@ extern const char *zebra_route_string(unsigned int route_type);
extern char zebra_route_char(unsigned int route_type);
/* Map a zserv command type to the same string,
* e.g. ZEBRA_INTERFACE_ADD -> "ZEBRA_INTERFACE_ADD" */
+/* Map a protocol name to its number. e.g. ZEBRA_ROUTE_BGP->9*/
+extern int proto_name2num(const char *s);
+
extern const char *zserv_command_string (unsigned int command);
/* Zebra's family types. */