Re: [ovs-dev] [PATCH v3] route-table: Remove netdevs in netdev_hash when deleted
> -Original Message- > From: Tonghao Zhang [mailto:xiangxia.m@gmail.com] > Sent: Thursday, August 10, 2017 9:23 AM > To: fukaige > Cc: ovs dev > Subject: Re: [ovs-dev] [PATCH v3] route-table: Remove netdevs in netdev_hash > when deleted > > why not remove the function of route_table_link_del to name_table_change() ? > Thanks for review. Seems it is a better way to use function of name_table_change() instead of rewriting a new function. I will modify it in v4 patch. > On Wed, Aug 9, 2017 at 3:41 PM, fukaige wrote: > > From: Kaige Fu > > > > Start a virtual machine with its backend tap device attached to a brought up > linux bridge. > > If we delete the linux bridge when vm is still running, we'll get the > > following error when trying to create a ovs bridge with the same name. > > > > The reason is that ovs-router subsystem add the linux bridge into > > netdev_shash, but does not remove it when the bridge is deleted in the > > situation. When the bridge is deleted, ovs will receive a RTM_DELLINK msg, > take this chance to remove the bridge in netdev_shash. > > > > ovs-vsctl: Error detected while setting up 'br-eth'. See ovs-vswitchd log > > for > details. > > > > ovs-vswitchd log: > > 2017-05-11T03:45:25.293Z|00026|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports recirculation > > 2017-05-11T03:45:25.293Z|00027|ofproto_dpif|INFO|system@ovs-system: > > MPLS label stack length probed as 1 > > 2017-05-11T03:45:25.293Z|00028|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports unique flow ids > > 2017-05-11T03:45:25.293Z|00029|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports ct_state > > 2017-05-11T03:45:25.293Z|00030|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports ct_zone > > 2017-05-11T03:45:25.293Z|00031|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports ct_mark > > 2017-05-11T03:45:25.293Z|00032|ofproto_dpif|INFO|system@ovs-system: > > Datapath supports ct_label > > 2017-05-11T03:45:25.364Z|1|ofproto_dpif_upcall(handler226)|INFO|re > > ceived packet on unassociated datapath port 0 > > 2017-05-11T03:45:25.368Z|00033|netdev_linux|WARN|ethtool command > > ETHTOOL_GFLAGS on network device br-eth failed: No such device > > 2017-05-11T03:45:25.368Z|00034|dpif|WARN|system@ovs-system: failed > to > > add br-eth as port: No such device > > 2017-05-11T03:45:25.368Z|00035|bridge|INFO|bridge br-eth: using > > datapath ID 2a51cf9f2841 > > 2017-05-11T03:45:25.368Z|00036|connmgr|INFO|br-eth: added service > controller "punix:/var/run/openvswitch/br-eth.mgmt" > > > > Signed-off-by: Kaige Fu > > --- > > lib/route-table.c | 15 +++ > > 1 file changed, 15 insertions(+) > > > > diff --git a/lib/route-table.c b/lib/route-table.c index > > 67fda31..5107056 100644 > > --- a/lib/route-table.c > > +++ b/lib/route-table.c > > @@ -33,6 +33,7 @@ > > #include "ovs-router.h" > > #include "packets.h" > > #include "rtnetlink.h" > > +#include "tnl-ports.h" > > #include "openvswitch/vlog.h" > > > > /* Linux 2.6.36 added RTA_MARK, so define it just in case we're > > building with @@ -79,6 +80,7 @@ static int route_table_reset(void); > > static void route_table_handle_msg(const struct route_table_msg *); > > static int route_table_parse(struct ofpbuf *, struct route_table_msg > > *); static void route_table_change(const struct route_table_msg *, > > void *); > > +static void route_table_link_del(const struct rtnetlink_change *, > > +void *); > > static void route_map_clear(void); > > > > static void name_table_init(void); > > @@ -112,6 +114,8 @@ route_table_init(void) > > nln_notifier_create(nln, RTNLGRP_IPV6_ROUTE, > > (nln_notify_func *) route_table_change, > > NULL); > > > > +rtnetlink_notifier_create(route_table_link_del, NULL); > > + > > route_table_reset(); > > name_table_init(); > > > > @@ -297,6 +301,17 @@ route_table_change(const struct route_table_msg > > *change OVS_UNUSED, } > > > > static void > > +route_table_link_del(const struct rtnetlink_change *change, > > + void *aux OVS_UNUSED) { > > +if(change && change->nlmsg_type == RTM_DELLINK) { > > +if(change->ifname) { > > +tnl_port_map_delete_ipdev(change->ifname); > > +} > > +} > > +} > > + > > +static void > > route_table_handle_msg(const struct route_table_msg *change) { > > if (change->relevant && change->nlmsg_type == RTM_NEWROUTE) { > > -- > > 1.8.3.1 > > > > > > ___ > > dev mailing list > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Re: [ovs-dev] [PATCH v3] route-table: Remove netdevs in netdev_hash when deleted
why not remove the function of route_table_link_del to name_table_change() ? On Wed, Aug 9, 2017 at 3:41 PM, fukaige wrote: > From: Kaige Fu > > Start a virtual machine with its backend tap device attached to a brought up > linux bridge. > If we delete the linux bridge when vm is still running, we'll get the > following error when > trying to create a ovs bridge with the same name. > > The reason is that ovs-router subsystem add the linux bridge into > netdev_shash, but does > not remove it when the bridge is deleted in the situation. When the bridge is > deleted, ovs > will receive a RTM_DELLINK msg, take this chance to remove the bridge in > netdev_shash. > > ovs-vsctl: Error detected while setting up 'br-eth'. See ovs-vswitchd log > for details. > > ovs-vswitchd log: > 2017-05-11T03:45:25.293Z|00026|ofproto_dpif|INFO|system@ovs-system: Datapath > supports recirculation > 2017-05-11T03:45:25.293Z|00027|ofproto_dpif|INFO|system@ovs-system: MPLS > label stack length probed as 1 > 2017-05-11T03:45:25.293Z|00028|ofproto_dpif|INFO|system@ovs-system: Datapath > supports unique flow ids > 2017-05-11T03:45:25.293Z|00029|ofproto_dpif|INFO|system@ovs-system: Datapath > supports ct_state > 2017-05-11T03:45:25.293Z|00030|ofproto_dpif|INFO|system@ovs-system: Datapath > supports ct_zone > 2017-05-11T03:45:25.293Z|00031|ofproto_dpif|INFO|system@ovs-system: Datapath > supports ct_mark > 2017-05-11T03:45:25.293Z|00032|ofproto_dpif|INFO|system@ovs-system: Datapath > supports ct_label > 2017-05-11T03:45:25.364Z|1|ofproto_dpif_upcall(handler226)|INFO|received > packet on unassociated datapath port 0 > 2017-05-11T03:45:25.368Z|00033|netdev_linux|WARN|ethtool command > ETHTOOL_GFLAGS on network device br-eth failed: No such device > 2017-05-11T03:45:25.368Z|00034|dpif|WARN|system@ovs-system: failed to add > br-eth as port: No such device > 2017-05-11T03:45:25.368Z|00035|bridge|INFO|bridge br-eth: using datapath ID > 2a51cf9f2841 > 2017-05-11T03:45:25.368Z|00036|connmgr|INFO|br-eth: added service controller > "punix:/var/run/openvswitch/br-eth.mgmt" > > Signed-off-by: Kaige Fu > --- > lib/route-table.c | 15 +++ > 1 file changed, 15 insertions(+) > > diff --git a/lib/route-table.c b/lib/route-table.c > index 67fda31..5107056 100644 > --- a/lib/route-table.c > +++ b/lib/route-table.c > @@ -33,6 +33,7 @@ > #include "ovs-router.h" > #include "packets.h" > #include "rtnetlink.h" > +#include "tnl-ports.h" > #include "openvswitch/vlog.h" > > /* Linux 2.6.36 added RTA_MARK, so define it just in case we're building with > @@ -79,6 +80,7 @@ static int route_table_reset(void); > static void route_table_handle_msg(const struct route_table_msg *); > static int route_table_parse(struct ofpbuf *, struct route_table_msg *); > static void route_table_change(const struct route_table_msg *, void *); > +static void route_table_link_del(const struct rtnetlink_change *, void *); > static void route_map_clear(void); > > static void name_table_init(void); > @@ -112,6 +114,8 @@ route_table_init(void) > nln_notifier_create(nln, RTNLGRP_IPV6_ROUTE, > (nln_notify_func *) route_table_change, NULL); > > +rtnetlink_notifier_create(route_table_link_del, NULL); > + > route_table_reset(); > name_table_init(); > > @@ -297,6 +301,17 @@ route_table_change(const struct route_table_msg *change > OVS_UNUSED, > } > > static void > +route_table_link_del(const struct rtnetlink_change *change, > + void *aux OVS_UNUSED) > +{ > +if(change && change->nlmsg_type == RTM_DELLINK) { > +if(change->ifname) { > +tnl_port_map_delete_ipdev(change->ifname); > +} > +} > +} > + > +static void > route_table_handle_msg(const struct route_table_msg *change) > { > if (change->relevant && change->nlmsg_type == RTM_NEWROUTE) { > -- > 1.8.3.1 > > > ___ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
[ovs-dev] [PATCH v3] route-table: Remove netdevs in netdev_hash when deleted
From: Kaige Fu Start a virtual machine with its backend tap device attached to a brought up linux bridge. If we delete the linux bridge when vm is still running, we'll get the following error when trying to create a ovs bridge with the same name. The reason is that ovs-router subsystem add the linux bridge into netdev_shash, but does not remove it when the bridge is deleted in the situation. When the bridge is deleted, ovs will receive a RTM_DELLINK msg, take this chance to remove the bridge in netdev_shash. ovs-vsctl: Error detected while setting up 'br-eth'. See ovs-vswitchd log for details. ovs-vswitchd log: 2017-05-11T03:45:25.293Z|00026|ofproto_dpif|INFO|system@ovs-system: Datapath supports recirculation 2017-05-11T03:45:25.293Z|00027|ofproto_dpif|INFO|system@ovs-system: MPLS label stack length probed as 1 2017-05-11T03:45:25.293Z|00028|ofproto_dpif|INFO|system@ovs-system: Datapath supports unique flow ids 2017-05-11T03:45:25.293Z|00029|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_state 2017-05-11T03:45:25.293Z|00030|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_zone 2017-05-11T03:45:25.293Z|00031|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_mark 2017-05-11T03:45:25.293Z|00032|ofproto_dpif|INFO|system@ovs-system: Datapath supports ct_label 2017-05-11T03:45:25.364Z|1|ofproto_dpif_upcall(handler226)|INFO|received packet on unassociated datapath port 0 2017-05-11T03:45:25.368Z|00033|netdev_linux|WARN|ethtool command ETHTOOL_GFLAGS on network device br-eth failed: No such device 2017-05-11T03:45:25.368Z|00034|dpif|WARN|system@ovs-system: failed to add br-eth as port: No such device 2017-05-11T03:45:25.368Z|00035|bridge|INFO|bridge br-eth: using datapath ID 2a51cf9f2841 2017-05-11T03:45:25.368Z|00036|connmgr|INFO|br-eth: added service controller "punix:/var/run/openvswitch/br-eth.mgmt" Signed-off-by: Kaige Fu --- lib/route-table.c | 15 +++ 1 file changed, 15 insertions(+) diff --git a/lib/route-table.c b/lib/route-table.c index 67fda31..5107056 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -33,6 +33,7 @@ #include "ovs-router.h" #include "packets.h" #include "rtnetlink.h" +#include "tnl-ports.h" #include "openvswitch/vlog.h" /* Linux 2.6.36 added RTA_MARK, so define it just in case we're building with @@ -79,6 +80,7 @@ static int route_table_reset(void); static void route_table_handle_msg(const struct route_table_msg *); static int route_table_parse(struct ofpbuf *, struct route_table_msg *); static void route_table_change(const struct route_table_msg *, void *); +static void route_table_link_del(const struct rtnetlink_change *, void *); static void route_map_clear(void); static void name_table_init(void); @@ -112,6 +114,8 @@ route_table_init(void) nln_notifier_create(nln, RTNLGRP_IPV6_ROUTE, (nln_notify_func *) route_table_change, NULL); +rtnetlink_notifier_create(route_table_link_del, NULL); + route_table_reset(); name_table_init(); @@ -297,6 +301,17 @@ route_table_change(const struct route_table_msg *change OVS_UNUSED, } static void +route_table_link_del(const struct rtnetlink_change *change, + void *aux OVS_UNUSED) +{ +if(change && change->nlmsg_type == RTM_DELLINK) { +if(change->ifname) { +tnl_port_map_delete_ipdev(change->ifname); +} +} +} + +static void route_table_handle_msg(const struct route_table_msg *change) { if (change->relevant && change->nlmsg_type == RTM_NEWROUTE) { -- 1.8.3.1 ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev