Re: [ovs-dev] [PATCH v4 ovn 0/2] Add IPv6 Prefix delegation (RFC3633)

2020-01-08 Thread Lorenzo Bianconi
> On Fri, Dec 20, 2019 at 5:02 PM Lorenzo Bianconi
>  wrote:
> >
> > Introduce IPv6 Prefix delegation state machine according to RFC 3633
> > https://tools.ietf.org/html/rfc3633.
> > Add handle_dhcpv6_reply controller action to parse advertise/reply from
> > IPv6 delegation server.
> > Introduce logical flows in ovn router pipeline in order to parse dhcpv6
> > advertise/reply from IPv6 prefix delegation router.
> > This series relies on the following OVS commit:
> > https://github.com/openvswitch/ovs/commit/cec89046f72cb044b068ba6a4e30dbcc4292c4c1
> >
> 
> Hi Lorenzo,
> 

Hi Numan,

thx for reviewing and testing the series :)

> I tested this patch series. And I don't think it is working as expected.
> 
> My test setup has the below ovn resources
> 
> **
> witch 6f57f575-1dc0-463e-8c04-7bcee6697cea (public)
> port public-lr0
> type: router
> router-port: lr0-public
> port ln-public
> type: localnet
> addresses: ["unknown"]
> switch 1fa5de75-fcae-49a8-9eca-55ed274cc100 (sw0)
> port sw0-port1
> addresses: ["50:54:00:00:00:03 10.0.0.3"]
> port sw0-lr0
> type: router
> router-port: lr0-sw0
> switch 73af6b0e-8156-446e-8419-83e5ecc323ee (sw1)
> port sw1-lr0
> type: router
> router-port: lr0-sw1
> port sw1-port1
> addresses: ["40:54:00:00:00:03 20.0.0.3"]
> router 87c8d985-3a42-423b-8ed0-d4a5b4cfb5ac (lr0)
> port lr0-public
> mac: "00:00:20:20:12:13"
> networks: ["172.16.0.100/24", "2001:db8:::1/64"]
> gateway chassis: [ovn-gw-1]
> port lr0-sw1
> mac: "00:00:00:00:ff:02"
> networks: ["20.0.0.1/24"]
> port lr0-sw0
> mac: "00:00:00:00:ff:01"
> networks: ["10.0.0.1/24"]
> **
> 
> When I enabled prefix delegation on lr-public, lr0-sw1 and lr0-sw0,
> ovn-controller (on ovn-gw-1) didn't
> send the IPv6 PD messages.  I had to add an IPv6 address on lr0-public
> router port for ovn-controller
> to start sending IPv6 PD  messages.
> 
> ***
> ovn-nbctl add logical_router_port lr0-public networks 
> "2001\:db8\:\:\:1/64"
> ***
> 
> I think that should not be the case. If prefix_delegation=true is set
> on a lrp, then ovn-controller should use the
> IPv6 link local address (which is derived from the mac) instead of
> expecting CMS to configure an IPv6 address.
> 
> In my case, the logical router port - lr0-sw0 never received any IPv6
> prefix. lr0-sw1 did receive.

ack, I will fix it in v5

> 
> In my testing, ovn-controller crashed with the below trace when I ran
> the above "ovn-nbctl add logical_router_port ..." command
> 
> ***
> (gdb) bt
> #0  0x004b7875 in skiplist_get_data (node=node@entry=0x786966)
> at ../lib/skiplist.c:212
> #1  0x004aa457 in ovsdb_idl_cursor_next_eq
> (cursor=cursor@entry=0x7ffe28971090) at ../lib/ovsdb-idl.c:2982
> #2  0x0041f2fd in prepare_ipv6_prefixd
> (active_tunnels=0x1f3dc60, chassis=0x1f9f9d0,
> local_datapaths=0x1f3dc00,
> sbrec_port_binding_by_name=0x1f12cd0,
> sbrec_port_binding_by_datapath=,
> ovnsb_idl_txn=0x2036cb0)
> at ../controller/pinctrl.c:3257
> #3  pinctrl_run (ovnsb_idl_txn=ovnsb_idl_txn@entry=0x2036cb0,
> 
> sbrec_datapath_binding_by_key=sbrec_datapath_binding_by_key@entry=0x1f3f940,
> 
> sbrec_port_binding_by_datapath=sbrec_port_binding_by_datapath@entry=0x1f134b0,
> sbrec_port_binding_by_key=sbrec_port_binding_by_key@entry=0x1f12e80,
> sbrec_port_binding_by_name=sbrec_port_binding_by_name@entry=0x1f12cd0,
> 
> sbrec_mac_binding_by_lport_ip=sbrec_mac_binding_by_lport_ip@entry=0x1f3faf0,
> sbrec_igmp_groups=0x1f3d060,
> sbrec_ip_multicast_opts=0x1f3fc80, dns_table=0x1f48f50,
> ce_table=0x1f48f50, svc_mon_table=0x1f48f50,
> br_int=, chassis=0x1f9f9d0,
> local_datapaths=0x1f3dc00, active_tunnels=0x1f3dc60)
> at ../controller/pinctrl.c:2510
> #4  0x00408536 in main (argc=, argv= out>) at ../controller/ovn-controller.c:2136
> 

ack, I will fix it in v5

> 
> This patch series stores the received PD in the
> port_binding.options:ipv6_ra_pd_list column.
> CMS will not come to know about the configured PD. Ideally all this
> should be transparent to CMS.
> When ovn-controller stores the received PD in the
> port_binding.options, ovn-northd should read this
> value and store it in logical_Router_port addresses column (or
> probably a new column) to indicate CMS
> that prefix is configured for this router port.

ack, I will add it in v5

> 
> And if CMS has enabled, router advertisement for a  router port,
> ovn-controller(s) should start sending RAs
> for the ports which belong to the logical switches.
> 
> As suggested earlier, please enhance system-ovn test case to add
> another logical router port to
> the router R1 and make sure that all the logical router ports get
> separate prefixes.

I guess I have already done it but probably the name convention I used is a
little bit messy. I will improve it in v5.

Regards,
Loren

Re: [ovs-dev] [PATCH v4 ovn 0/2] Add IPv6 Prefix delegation (RFC3633)

2019-12-23 Thread Numan Siddique
On Fri, Dec 20, 2019 at 5:02 PM Lorenzo Bianconi
 wrote:
>
> Introduce IPv6 Prefix delegation state machine according to RFC 3633
> https://tools.ietf.org/html/rfc3633.
> Add handle_dhcpv6_reply controller action to parse advertise/reply from
> IPv6 delegation server.
> Introduce logical flows in ovn router pipeline in order to parse dhcpv6
> advertise/reply from IPv6 prefix delegation router.
> This series relies on the following OVS commit:
> https://github.com/openvswitch/ovs/commit/cec89046f72cb044b068ba6a4e30dbcc4292c4c1
>

Hi Lorenzo,

I tested this patch series. And I don't think it is working as expected.

My test setup has the below ovn resources

**
witch 6f57f575-1dc0-463e-8c04-7bcee6697cea (public)
port public-lr0
type: router
router-port: lr0-public
port ln-public
type: localnet
addresses: ["unknown"]
switch 1fa5de75-fcae-49a8-9eca-55ed274cc100 (sw0)
port sw0-port1
addresses: ["50:54:00:00:00:03 10.0.0.3"]
port sw0-lr0
type: router
router-port: lr0-sw0
switch 73af6b0e-8156-446e-8419-83e5ecc323ee (sw1)
port sw1-lr0
type: router
router-port: lr0-sw1
port sw1-port1
addresses: ["40:54:00:00:00:03 20.0.0.3"]
router 87c8d985-3a42-423b-8ed0-d4a5b4cfb5ac (lr0)
port lr0-public
mac: "00:00:20:20:12:13"
networks: ["172.16.0.100/24", "2001:db8:::1/64"]
gateway chassis: [ovn-gw-1]
port lr0-sw1
mac: "00:00:00:00:ff:02"
networks: ["20.0.0.1/24"]
port lr0-sw0
mac: "00:00:00:00:ff:01"
networks: ["10.0.0.1/24"]
**

When I enabled prefix delegation on lr-public, lr0-sw1 and lr0-sw0,
ovn-controller (on ovn-gw-1) didn't
send the IPv6 PD messages.  I had to add an IPv6 address on lr0-public
router port for ovn-controller
to start sending IPv6 PD  messages.

***
ovn-nbctl add logical_router_port lr0-public networks "2001\:db8\:\:\:1/64"
***

I think that should not be the case. If prefix_delegation=true is set
on a lrp, then ovn-controller should use the
IPv6 link local address (which is derived from the mac) instead of
expecting CMS to configure an IPv6 address.

In my case, the logical router port - lr0-sw0 never received any IPv6
prefix. lr0-sw1 did receive.

In my testing, ovn-controller crashed with the below trace when I ran
the above "ovn-nbctl add logical_router_port ..." command

***
(gdb) bt
#0  0x004b7875 in skiplist_get_data (node=node@entry=0x786966)
at ../lib/skiplist.c:212
#1  0x004aa457 in ovsdb_idl_cursor_next_eq
(cursor=cursor@entry=0x7ffe28971090) at ../lib/ovsdb-idl.c:2982
#2  0x0041f2fd in prepare_ipv6_prefixd
(active_tunnels=0x1f3dc60, chassis=0x1f9f9d0,
local_datapaths=0x1f3dc00,
sbrec_port_binding_by_name=0x1f12cd0,
sbrec_port_binding_by_datapath=,
ovnsb_idl_txn=0x2036cb0)
at ../controller/pinctrl.c:3257
#3  pinctrl_run (ovnsb_idl_txn=ovnsb_idl_txn@entry=0x2036cb0,
sbrec_datapath_binding_by_key=sbrec_datapath_binding_by_key@entry=0x1f3f940,

sbrec_port_binding_by_datapath=sbrec_port_binding_by_datapath@entry=0x1f134b0,
sbrec_port_binding_by_key=sbrec_port_binding_by_key@entry=0x1f12e80,
sbrec_port_binding_by_name=sbrec_port_binding_by_name@entry=0x1f12cd0,
sbrec_mac_binding_by_lport_ip=sbrec_mac_binding_by_lport_ip@entry=0x1f3faf0,
sbrec_igmp_groups=0x1f3d060,
sbrec_ip_multicast_opts=0x1f3fc80, dns_table=0x1f48f50,
ce_table=0x1f48f50, svc_mon_table=0x1f48f50,
br_int=, chassis=0x1f9f9d0,
local_datapaths=0x1f3dc00, active_tunnels=0x1f3dc60)
at ../controller/pinctrl.c:2510
#4  0x00408536 in main (argc=, argv=) at ../controller/ovn-controller.c:2136


This patch series stores the received PD in the
port_binding.options:ipv6_ra_pd_list column.
CMS will not come to know about the configured PD. Ideally all this
should be transparent to CMS.
When ovn-controller stores the received PD in the
port_binding.options, ovn-northd should read this
value and store it in logical_Router_port addresses column (or
probably a new column) to indicate CMS
that prefix is configured for this router port.

And if CMS has enabled, router advertisement for a  router port,
ovn-controller(s) should start sending RAs
for the ports which belong to the logical switches.

As suggested earlier, please enhance system-ovn test case to add
another logical router port to
the router R1 and make sure that all the logical router ports get
separate prefixes.

Thanks
Numan

> Changes since v3:
> - cosmetics
> - add a provider bridge in the unit-test deployment and add a localnet
>   port to the deployment to access the underlay network
> - request IPv6 prefix even for bar router logical port in the unit-test
>   deployment
>
> Changes since v2:
> - add unitest support in system-ovn.at
>
> Changes since v1:
> - rebase on top of ovn master branch
> - request an IPv6 prefix for each 'downstream' logical router port marked with
>   prefix set to true
> - add missing documentation

[ovs-dev] [PATCH v4 ovn 0/2] Add IPv6 Prefix delegation (RFC3633)

2019-12-20 Thread Lorenzo Bianconi
Introduce IPv6 Prefix delegation state machine according to RFC 3633
https://tools.ietf.org/html/rfc3633.
Add handle_dhcpv6_reply controller action to parse advertise/reply from
IPv6 delegation server.
Introduce logical flows in ovn router pipeline in order to parse dhcpv6
advertise/reply from IPv6 prefix delegation router.
This series relies on the following OVS commit:
https://github.com/openvswitch/ovs/commit/cec89046f72cb044b068ba6a4e30dbcc4292c4c1

Changes since v3:
- cosmetics
- add a provider bridge in the unit-test deployment and add a localnet
  port to the deployment to access the underlay network
- request IPv6 prefix even for bar router logical port in the unit-test
  deployment

Changes since v2:
- add unitest support in system-ovn.at

Changes since v1:
- rebase on top of ovn master branch
- request an IPv6 prefix for each 'downstream' logical router port marked with
  prefix set to true
- add missing documentation
- rename dhcp6_server_pkt in handle_dhcpv6_reply

Lorenzo Bianconi (2):
  controller: add ipv6 prefix delegation state machine
  northd: add logical flows for dhcpv6 pfd parsing

 controller/pinctrl.c  | 597 ++
 include/ovn/actions.h |   8 +-
 lib/actions.c |  22 ++
 lib/ovn-l7.h  |  19 ++
 northd/ovn-northd.c   |  69 -
 ovn-nb.xml|  17 ++
 ovn-sb.xml|   8 +
 tests/atlocal.in  |   5 +-
 tests/ovn.at  |   6 +
 tests/system-ovn.at   | 124 +
 utilities/ovn-trace.c |   3 +
 11 files changed, 875 insertions(+), 3 deletions(-)

-- 
2.21.0

___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev