2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-21 14:49:41 +00:00

route-table: Process route messages more selectively.

This commit cleans up the routing table by preventing it from
processing messages which are not relevant for our purposes.
This commit is contained in:
Ethan Jackson
2011-01-13 16:40:42 -08:00
parent a132aa969e
commit db2dede403

View File

@@ -46,6 +46,7 @@ struct route_data {
/* A digested version of a route message sent down by the kernel to indicate
* that a route has changed. */
struct route_table_msg {
bool relevant; /* Should this message be processed? */
int nlmsg_type; /* e.g. RTM_NEWROUTE, RTM_DELROUTE. */
struct route_data rd; /* Data parsed from this message. */
};
@@ -232,6 +233,16 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change)
}
memset(change, 0, sizeof *change);
change->relevant = true;
if (rtm->rtm_scope == RT_SCOPE_NOWHERE) {
change->relevant = false;
}
if (rtm->rtm_type != RTN_UNICAST &&
rtm->rtm_type != RTN_LOCAL) {
change->relevant = false;
}
change->nlmsg_type = nlmsg->nlmsg_type;
change->rd.rtm_dst_len = rtm->rtm_dst_len;
@@ -254,6 +265,8 @@ route_table_change(const struct route_table_msg *change, void *aux OVS_UNUSED)
if (!change) {
VLOG_DBG_RL(&rl, "received NULL change message");
route_table_reset();
} else if (!change->relevant) {
VLOG_DBG_RL(&rl, "ignoring irrelevant change message");
} else if (change->nlmsg_type == RTM_NEWROUTE) {
if (!route_node_lookup(&change->rd)) {
struct route_node *rn;