← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 2011687] [NEW] O flag is not enabled when ipv6_ra_mode is dhcpv6-stateful

 

Public bug reported:

* Summary (Bug title): keep it small, possibly one line.

When ipv6_ra_mode is dhcpv6-stateful, both M flag and O flag should be 1, but actually only M flag is 1 and O flag is 0 in router advertisement packets.
ml2/OVS and ml2/OVN have the same behavior.


* High level description: provide a brief sentence (a couple of lines) of what are you trying to accomplish, or would like to accomplish differently.

According to the following document, both M flag and O flag will be 1
when ipv6_ra_mode is dhcpv6-stateful.

  https://docs.openstack.org/neutron/latest/admin/config-ipv6.html
  > Setting DHCPv6-stateless for ipv6_ra_mode configures the neutron router with an radvd agent to send 
  > Router Advertisements. The list below captures the values set for the address configuration 
  > flags in the Router Advertisement messages in this scenario. Similarly, setting DHCPv6- 
  > stateless for ipv6_address_mode configures neutron DHCP implementation to provide the additional network information.
  > - Autonomous Address Configuration Flag = 1
  > - Managed Address Configuration Flag = 0
  > - Other Configuration Flag = 1

But actually only M flag is 1 and O flag is 0.
This behavior comes from the following implementations:

ML2/OVS
https://github.com/openstack/neutron/blob/f545c002dc699f849026ccd1bad403b2933373aa/neutron/agent/linux/ra.py#L53-L55

ML2/OVN
https://github.com/ovn-org/ovn/blob/a5238e6234d17e119dca952d9e43c36dce057d5e/controller/pinctrl.c#L3733-L3734
https://github.com/ovn-org/ovn/blob/a5238e6234d17e119dca952d9e43c36dce057d5e/lib/actions.c#L3349-L3350

I tested a RHEL 8 instance and the instance could obtain DNS server information from DHCPv6 even though O flag is 0.
Therefore some kind of operating system is not affected even if O flag is 0.

But actually there is a difference between the document and actual behavior.
Which one is correct and which should I modify?


* Pre-conditions: what is the initial state of your system? Please consider enumerating resources available in the system, if useful in diagnosing the problem. Who are you? A regular tenant or a super-user? Are you describing service-to-service interaction?

ml2/OVS or ml2/OVN


* Step-by-step reproduction steps: CLI commands or API requests are great; please, consider using http://paste.openstack.org for long outputs.

I confirmed this behavior on Train-based-OpenStack (Red Hat OpenStack
Platform 16.2)

1. Deploy OpenStack with ml2/OVS or ml2/OVN
2. Create a router and a tenant network/subnet with ipv6_stateful by the following commands

  openstack network create ipv6_stateful
  openstack subnet create --ip-version 6 --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful --network ipv6_stateful --subnet-range fc00:2::/64 ipv6_stateful --gateway fc00:2::1 --dns-nameserver 2001:4860:4860::8888
  openstack router create router1
  openstack router add subnet router1 ipv6_stateful

3. Create an instance on the network

  openstack server create --flavor flavor --image rhel-8.2-290 --network
ipv6_stateful --security-group sg --key-name keypair ipv6_stateful

4. Take packet capture of Router Advertisement packets on the instance


* Expected output: what did you hope to see?
Both M flag and O flag are 1,


* Actual output: did the system silently fail (in this case log traces are useful)?
Only M flag is 1 and O flag is 0.


* Version:
I confirmed this behavior on Train-based-OpenStack (Red Hat OpenStack Platform 16.2)
But as far as I checked the implementation, the latest version should have the same behavior.


* Perceived severity: is this a blocker for you?
Serverity is low.
I just wander why there is the difference between document and actual behavior.


* Attachments: consider attaching logs, truncated log snippets are rarely useful.
The following is the excerpt of actual packet captures.

<ML2/OVN>
~~~
Internet Control Message Protocol v6
    Type: Router Advertisement (134)
    Code: 0
    Checksum: 0x2a73 [correct]
    [Checksum Status: Good]
    Cur hop limit: 255
    Flags: 0x80, Managed address configuration, Prf (Default Router Preference): Medium
        1... .... = Managed address configuration: Set
        .0.. .... = Other configuration: Not set
        ..0. .... = Home Agent: Not set
        ...0 0... = Prf (Default Router Preference): Medium (0)
        .... .0.. = Proxy: Not set
        .... ..0. = Reserved: 0
    Router lifetime (s): 65535
    Reachable time (ms): 0
    Retrans timer (ms): 0
    ICMPv6 Option (Source link-layer address : fa:16:3e:de:92:07)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: fa:16:3e:de:92:07 (fa:16:3e:de:92:07)
    ICMPv6 Option (MTU : 1442)
        Type: MTU (5)
        Length: 1 (8 bytes)
        Reserved
        MTU: 1442
    ICMPv6 Option (Prefix information : fc00:2::/64)
        Type: Prefix information (3)
        Length: 4 (32 bytes)
        Prefix Length: 64
        Flag: 0x80, On-link flag(L)
            1... .... = On-link flag(L): Set
            .0.. .... = Autonomous address-configuration flag(A): Not set
            ..0. .... = Router address flag(R): Not set
            ...0 0000 = Reserved: 0
        Valid Lifetime: Infinity (4294967295)
        Preferred Lifetime: Infinity (4294967295)
        Reserved
        Prefix: fc00:2::
~~~

<ml2/OVS>
~~~
Internet Control Message Protocol v6
    Type: Router Advertisement (134)
    Code: 0
    Checksum: 0x986a [correct]
    [Checksum Status: Good]
    Cur hop limit: 64
    Flags: 0x80, Managed address configuration, Prf (Default Router Preference): Medium
        1... .... = Managed address configuration: Set
        .0.. .... = Other configuration: Not set
        ..0. .... = Home Agent: Not set
        ...0 0... = Prf (Default Router Preference): Medium (0)
        .... .0.. = Proxy: Not set
        .... ..0. = Reserved: 0
    Router lifetime (s): 300
    Reachable time (ms): 0
    Retrans timer (ms): 0
    ICMPv6 Option (Prefix information : fc00:2::/64)
        Type: Prefix information (3)
        Length: 4 (32 bytes)
        Prefix Length: 64
        Flag: 0x80, On-link flag(L)
            1... .... = On-link flag(L): Set
            .0.. .... = Autonomous address-configuration flag(A): Not set
            ..0. .... = Router address flag(R): Not set
            ...0 0000 = Reserved: 0
        Valid Lifetime: 86400
        Preferred Lifetime: 14400
        Reserved
        Prefix: fc00:2::
    ICMPv6 Option (MTU : 1450)
        Type: MTU (5)
        Length: 1 (8 bytes)
        Reserved
        MTU: 1450
    ICMPv6 Option (Source link-layer address : fa:16:3e:a6:2f:3d)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: fa:16:3e:a6:2f:3d (fa:16:3e:a6:2f:3d)
~~~

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/2011687

Title:
  O flag is not enabled when ipv6_ra_mode is dhcpv6-stateful

Status in neutron:
  New

Bug description:
  * Summary (Bug title): keep it small, possibly one line.

  When ipv6_ra_mode is dhcpv6-stateful, both M flag and O flag should be 1, but actually only M flag is 1 and O flag is 0 in router advertisement packets.
  ml2/OVS and ml2/OVN have the same behavior.

  
  * High level description: provide a brief sentence (a couple of lines) of what are you trying to accomplish, or would like to accomplish differently.

  According to the following document, both M flag and O flag will be 1
  when ipv6_ra_mode is dhcpv6-stateful.

    https://docs.openstack.org/neutron/latest/admin/config-ipv6.html
    > Setting DHCPv6-stateless for ipv6_ra_mode configures the neutron router with an radvd agent to send 
    > Router Advertisements. The list below captures the values set for the address configuration 
    > flags in the Router Advertisement messages in this scenario. Similarly, setting DHCPv6- 
    > stateless for ipv6_address_mode configures neutron DHCP implementation to provide the additional network information.
    > - Autonomous Address Configuration Flag = 1
    > - Managed Address Configuration Flag = 0
    > - Other Configuration Flag = 1

  But actually only M flag is 1 and O flag is 0.
  This behavior comes from the following implementations:

  ML2/OVS
  https://github.com/openstack/neutron/blob/f545c002dc699f849026ccd1bad403b2933373aa/neutron/agent/linux/ra.py#L53-L55

  ML2/OVN
  https://github.com/ovn-org/ovn/blob/a5238e6234d17e119dca952d9e43c36dce057d5e/controller/pinctrl.c#L3733-L3734
  https://github.com/ovn-org/ovn/blob/a5238e6234d17e119dca952d9e43c36dce057d5e/lib/actions.c#L3349-L3350

  I tested a RHEL 8 instance and the instance could obtain DNS server information from DHCPv6 even though O flag is 0.
  Therefore some kind of operating system is not affected even if O flag is 0.

  But actually there is a difference between the document and actual behavior.
  Which one is correct and which should I modify?

  
  * Pre-conditions: what is the initial state of your system? Please consider enumerating resources available in the system, if useful in diagnosing the problem. Who are you? A regular tenant or a super-user? Are you describing service-to-service interaction?

  ml2/OVS or ml2/OVN

  
  * Step-by-step reproduction steps: CLI commands or API requests are great; please, consider using http://paste.openstack.org for long outputs.

  I confirmed this behavior on Train-based-OpenStack (Red Hat OpenStack
  Platform 16.2)

  1. Deploy OpenStack with ml2/OVS or ml2/OVN
  2. Create a router and a tenant network/subnet with ipv6_stateful by the following commands

    openstack network create ipv6_stateful
    openstack subnet create --ip-version 6 --ipv6-address-mode dhcpv6-stateful --ipv6-ra-mode dhcpv6-stateful --network ipv6_stateful --subnet-range fc00:2::/64 ipv6_stateful --gateway fc00:2::1 --dns-nameserver 2001:4860:4860::8888
    openstack router create router1
    openstack router add subnet router1 ipv6_stateful

  3. Create an instance on the network

    openstack server create --flavor flavor --image rhel-8.2-290
  --network ipv6_stateful --security-group sg --key-name keypair
  ipv6_stateful

  4. Take packet capture of Router Advertisement packets on the instance

  
  * Expected output: what did you hope to see?
  Both M flag and O flag are 1,

  
  * Actual output: did the system silently fail (in this case log traces are useful)?
  Only M flag is 1 and O flag is 0.

  
  * Version:
  I confirmed this behavior on Train-based-OpenStack (Red Hat OpenStack Platform 16.2)
  But as far as I checked the implementation, the latest version should have the same behavior.

  
  * Perceived severity: is this a blocker for you?
  Serverity is low.
  I just wander why there is the difference between document and actual behavior.

  
  * Attachments: consider attaching logs, truncated log snippets are rarely useful.
  The following is the excerpt of actual packet captures.

  <ML2/OVN>
  ~~~
  Internet Control Message Protocol v6
      Type: Router Advertisement (134)
      Code: 0
      Checksum: 0x2a73 [correct]
      [Checksum Status: Good]
      Cur hop limit: 255
      Flags: 0x80, Managed address configuration, Prf (Default Router Preference): Medium
          1... .... = Managed address configuration: Set
          .0.. .... = Other configuration: Not set
          ..0. .... = Home Agent: Not set
          ...0 0... = Prf (Default Router Preference): Medium (0)
          .... .0.. = Proxy: Not set
          .... ..0. = Reserved: 0
      Router lifetime (s): 65535
      Reachable time (ms): 0
      Retrans timer (ms): 0
      ICMPv6 Option (Source link-layer address : fa:16:3e:de:92:07)
          Type: Source link-layer address (1)
          Length: 1 (8 bytes)
          Link-layer address: fa:16:3e:de:92:07 (fa:16:3e:de:92:07)
      ICMPv6 Option (MTU : 1442)
          Type: MTU (5)
          Length: 1 (8 bytes)
          Reserved
          MTU: 1442
      ICMPv6 Option (Prefix information : fc00:2::/64)
          Type: Prefix information (3)
          Length: 4 (32 bytes)
          Prefix Length: 64
          Flag: 0x80, On-link flag(L)
              1... .... = On-link flag(L): Set
              .0.. .... = Autonomous address-configuration flag(A): Not set
              ..0. .... = Router address flag(R): Not set
              ...0 0000 = Reserved: 0
          Valid Lifetime: Infinity (4294967295)
          Preferred Lifetime: Infinity (4294967295)
          Reserved
          Prefix: fc00:2::
  ~~~

  <ml2/OVS>
  ~~~
  Internet Control Message Protocol v6
      Type: Router Advertisement (134)
      Code: 0
      Checksum: 0x986a [correct]
      [Checksum Status: Good]
      Cur hop limit: 64
      Flags: 0x80, Managed address configuration, Prf (Default Router Preference): Medium
          1... .... = Managed address configuration: Set
          .0.. .... = Other configuration: Not set
          ..0. .... = Home Agent: Not set
          ...0 0... = Prf (Default Router Preference): Medium (0)
          .... .0.. = Proxy: Not set
          .... ..0. = Reserved: 0
      Router lifetime (s): 300
      Reachable time (ms): 0
      Retrans timer (ms): 0
      ICMPv6 Option (Prefix information : fc00:2::/64)
          Type: Prefix information (3)
          Length: 4 (32 bytes)
          Prefix Length: 64
          Flag: 0x80, On-link flag(L)
              1... .... = On-link flag(L): Set
              .0.. .... = Autonomous address-configuration flag(A): Not set
              ..0. .... = Router address flag(R): Not set
              ...0 0000 = Reserved: 0
          Valid Lifetime: 86400
          Preferred Lifetime: 14400
          Reserved
          Prefix: fc00:2::
      ICMPv6 Option (MTU : 1450)
          Type: MTU (5)
          Length: 1 (8 bytes)
          Reserved
          MTU: 1450
      ICMPv6 Option (Source link-layer address : fa:16:3e:a6:2f:3d)
          Type: Source link-layer address (1)
          Length: 1 (8 bytes)
          Link-layer address: fa:16:3e:a6:2f:3d (fa:16:3e:a6:2f:3d)
  ~~~

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/2011687/+subscriptions



Follow ups