This serial patches try to support Router Solicitation (RS) message responder,
which will reply Router Advertisement (RA) message, for OVN.

There will be logical flows in table ls_in_rs_rsp to work as RS responder, with:
 - match: ip6.dst == ff02::2 && nd_rs
   (nd_rs: icmp6.type == 133 && icmp6.code == 0 && ttl == 255)
 - action: nd_ra{put_nd_ra(64,0,10800,0,0);
                 put_nd_ra_opt_sll(12:34:56:78:9a:bc);
                 put_nd_ra_opt_mtu(1450);
                 put_nd_ra_opt_prefix(64,192,10800,10800,fdad:a0f9:a012::);
                 eth.src = 12:34:56:78:9a:bc;
                 ip6.src = fe80::f334:56ff:fe78:9abc;
                 outport = inport; flags.loopback = 1; output;};
   (nd_ra is a new action which stands for RS responder;
    put_nd_ra is a new specific inner action for nd_ra to set cur_hop_limit,
      "Managed address configuration" and "Other configuration" flags, router
      lifetime, reachable time and retrans timer in RA packet;
    put_nd_ra_opt_sll is a new specific inner action for nd_ra to append Source
      Link-layer Address Option for RA message with given ethernet address,
      such as 12:34:56:78:9a:bc;
    put_nd_ra_opt_mtu is a new specific inner action for nd_ra to append MTU
      Option for RA message with given integer value, such as 1450;
    put_nd_ra_opt_prefix is a new specific inner action for nd_ra to append
      Prefix Information Option for RA message with inner parameters. The inner
      parameters will set prefix length, on-link flag and autonomous
      address-configuration flag, valid lifetime, preferred lifetime, prefix
      in Prefix Information Option.
After a RA packet is composed, the left nested actions will make RA packet
transmitted back to the inport, where Router Solicitation (RS) packet comes.

To configure RA packet fields, such as "Managed address configuration" flag,
router_litefime, user can set Logical_Router_Port.ipv6_ra_config to do that,
e.g.
  ovn-nbctl add Logical_Router_Port lrp0 ipv6_ra_config managed_address="0" \
  other_config="0"

To configure Prefix Infromation Option fields, such as valid_lifetime, user
can insert records into new table Logical_Router_RA_Prefix_Config, and let
Logical_Router_Port.ipv6_ra_prefix_configs to refer them, e.g.
  ovn-nbctl -- --id=@d1 create Logical_Router_RA_Prefix_Config \
  prefix=\"fdad:1234:5678::/64\" options="\"valid_lifetime\"="21600" \
  \"preferred_lifetime\"="21600" \"autonomous_address\"="0"" \
  -- add Logical_Router_Port lrp0 ipv6_ra_prefix_configs @d1

Most fields in a RA packet, such as "Managed address configuration" and "Other
configuration" flags, router_lifetime, valid lifetime will have default values.
But for mtu value in MTU Option, there is no valid default value. User should
configure this value for each lrouter port.

v1 -> v2:
rebase on upstream
separete ovs_nd_opt rename into a single patch
separete lflow changing for RS packet forward in ovn-northd into a single patch
update is_nd to include RS and RA type, add is_nd_neighbor to inherit previous
  is_nd behavior.


v2 -> v3:
rebase on upstream
address comments from Justin, including:
  revert changing on is_nd and is_nd_neighbor brought in version 2
  update annotations in lib/packets.h for ovs_ra_msg, ovs_nd_prefix_opt,
    ovs_nd_lla_opt, ovs_nd_mtu_opt.
  combine methods compse_nd_ra, packet_put_ra_sll_opt, packet_put_ra_mtu_opt in
    version 2 into method compse_nd_ra_with_sll_mtu_opts.
  update pinctrl_handle_nd to fit new changes on compse_nd_ra_with_sll_mtu_opts.


Zongkai LI (7):
  packets: add compose_nd_ra
  lib: rename ovs_nd_opt to ovs_nd_lla_opt
  ovn: extend expr symbols for ND
  ovn-controller: add 'nd_ra' action
  ovn-controller: add 'put_nd_ra' and 'put_nd_opt_*' actions support
  ovn-northd: add Router Advertisement packet forward flow
  ovn-northd: add IPv6 RS responder support

 include/ovn/actions.h     |  86 +++++++++++++-
 lib/flow.c                |  30 ++---
 lib/odp-execute.c         |  22 ++--
 lib/packets.c             | 146 ++++++++++++++++++-----
 lib/packets.h             |  76 ++++++++++--
 ovn/controller/pinctrl.c  | 235 +++++++++++++++++++++++++++++++++----
 ovn/lib/actions.c         | 290 +++++++++++++++++++++++++++++++++++++++++++++-
 ovn/lib/logical-fields.c  |  18 ++-
 ovn/northd/ovn-northd.c   | 166 +++++++++++++++++++++++++-
 ovn/ovn-nb.ovsschema      |  21 +++-
 ovn/ovn-nb.xml            | 103 ++++++++++++++++
 ovn/ovn-sb.xml            |  84 +++++++++++++-
 ovn/utilities/ovn-nbctl.c |   5 +
 ovn/utilities/ovn-trace.c |  23 ++--
 tests/ovn.at              | 157 ++++++++++++++++++++++++-
 15 files changed, 1354 insertions(+), 108 deletions(-)

-- 
2.7.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to