Thanks for the guidance. I put the patch on gerrit: https://review.openstack.org/#/c/204725/
JN > On Jul 21, 2015, at 4:59 PM, Ian Wells <ijw.ubu...@cack.org.uk> wrote: > > It is useful, yes; and posting diffs on the mailing list is not the way to > get them reviewed and approved. If you can get this on gerrit it will get a > proper review, and I would certainly like to see something like this > incorporated. > > On 21 July 2015 at 15:41, John Nielsen <li...@jnielsen.net> wrote: >> I may be in a small minority since I a) use VXLAN, b) don’t hate multicast >> and c) use linuxbridge instead of OVS. However I thought I’d share this >> patch in case I’m not alone. >> >> If you assume the use of multicast, VXLAN works quite nicely to isolate L2 >> domains AND to prevent delivery of unwanted broadcast/unknown/multicast >> packets to VTEPs that don’t need them. However, the latter only holds up if >> each VXLAN VNI uses its own unique multicast group address. Currently, you >> have to either disable multicast (and use l2_population or similar) or use >> only a single group address for ALL VNIs (and force every single VTEP to >> receive every BUM packet from every network). For my usage, this patch seems >> simpler. >> >> Feedback is very welcome. In particular I’d like to know if anyone else >> finds this useful and if so, what (if any) changes might be required to get >> it committed. Thanks! >> >> JN >> >> >> commit 17c32a9ad07911f3b4148e96cbcae88720eef322 >> Author: John Nielsen <j...@jnielsen.net> >> Date: Tue Jul 21 16:13:42 2015 -0600 >> >> Add a boolean option, vxlan_group_auto, which if enabled will compute >> a unique multicast group address group for each VXLAN VNI. Since VNIs >> are 24 bits, they map nicely to the 239.0.0.0/8 "site-local" multicast >> range. Eight bits of the VNI are used for the second, third and fourth >> octets (with 239 always as the first octet). >> >> Using this option allows VTEPs to receive BUM datagrams via multicast, >> but only for those VNIs in which they participate. In other words, it is >> an alternative to the l2_population extension and driver for environments >> where both multicast and linuxbridge are used. >> >> If the option is True then multicast groups are computed as described >> above. If the option is False then the previous behavior is used >> (either a single multicast group is defined by vxlan_group or multicast >> is disabled). >> >> diff --git a/etc/neutron/plugins/ml2/linuxbridge_agent.ini >> b/etc/neutron/plugins/ml2/linuxbridge_agent.ini >> index d1a01ba..03578ad 100644 >> --- a/etc/neutron/plugins/ml2/linuxbridge_agent.ini >> +++ b/etc/neutron/plugins/ml2/linuxbridge_agent.ini >> @@ -25,6 +25,10 @@ >> # This group must be the same on all the agents. >> # vxlan_group = 224.0.0.1 >> # >> +# (BoolOpt) Derive a unique 239.x.x.x multicast group for each vxlan VNI. >> +# If this option is true, the setting of vxlan_group is ignored. >> +# vxlan_group_auto = False >> +# >> # (StrOpt) Local IP address to use for VXLAN endpoints (required) >> # local_ip = >> # >> diff --git a/neutron/plugins/ml2/drivers/linuxbridge/agent/common/config.py >> b/neutron/plugins/ml2/drivers/linuxbridge/agent/common/config.py >> index 6f15236..b4805d5 100644 >> --- a/neutron/plugins/ml2/drivers/linuxbridge/agent/common/config.py >> +++ b/neutron/plugins/ml2/drivers/linuxbridge/agent/common/config.py >> @@ -31,6 +31,9 @@ vxlan_opts = [ >> help=_("TOS for vxlan interface protocol packets.")), >> cfg.StrOpt('vxlan_group', default=DEFAULT_VXLAN_GROUP, >> help=_("Multicast group for vxlan interface.")), >> + cfg.BoolOpt('vxlan_group_auto', default=False, >> + help=_("Derive a unique 239.x.x.x multicast group for each " >> + "vxlan VNI")), >> cfg.IPOpt('local_ip', version=4, >> help=_("Local IP address of the VXLAN endpoints.")), >> cfg.BoolOpt('l2_population', default=False, >> diff --git >> a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py >> b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py >> index 61627eb..a0efde1 100644 >> --- >> a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py >> +++ >> b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py >> @@ -127,6 +127,14 @@ class LinuxBridgeManager(object): >> LOG.warning(_LW("Invalid Segmentation ID: %s, will lead to " >> "incorrect vxlan device name"), segmentation_id) >> >> + def get_vxlan_group(self, segmentation_id): >> + if cfg.CONF.VXLAN.vxlan_group_auto: >> + return ("239." + >> + str(segmentation_id >> 16) + "." + >> + str(segmentation_id >> 8 % 256) + "." + >> + str(segmentation_id % 256)) >> + return cfg.CONF.VXLAN.vxlan_group >> + >> def get_all_neutron_bridges(self): >> neutron_bridge_list = [] >> bridge_list = os.listdir(BRIDGE_FS) >> @@ -240,7 +248,7 @@ class LinuxBridgeManager(object): >> 'segmentation_id': segmentation_id}) >> args = {'dev': self.local_int} >> if self.vxlan_mode == lconst.VXLAN_MCAST: >> - args['group'] = cfg.CONF.VXLAN.vxlan_group >> + args['group'] = self.get_vxlan_group(segmentation_id) >> if cfg.CONF.VXLAN.ttl: >> args['ttl'] = cfg.CONF.VXLAN.ttl >> if cfg.CONF.VXLAN.tos: >> @@ -553,9 +561,10 @@ class LinuxBridgeManager(object): >> self.delete_vxlan(test_iface) >> >> def vxlan_mcast_supported(self): >> - if not cfg.CONF.VXLAN.vxlan_group: >> + if not (cfg.CONF.VXLAN.vxlan_group or >> cfg.CONF.VXLAN.vxlan_group_auto): >> LOG.warning(_LW('VXLAN muticast group must be provided in ' >> - 'vxlan_group option to enable VXLAN MCAST >> mode')) >> + 'vxlan_group option or vxlan_group_auto must ' >> + 'be True to enable VXLAN MCAST mode')) >> return False >> if not ip_lib.iproute_arg_supported( >> ['ip', 'link', 'add', 'type', 'vxlan'], >> >> >> __________________________________________________________________________ >> OpenStack Development Mailing List (not for usage questions) >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >> >> __________________________________________________________________________ >> OpenStack Development Mailing List (not for usage questions) >> Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev