From: Ales Musil <amu...@redhat.com> The SVC monitor was exposed without any limitation. Add CoPP for the SVC monitor flow, which adds a way for CMSs to limit the traffic that this flow accepts.
Signed-off-by: Ales Musil <amu...@redhat.com> --- lib/copp.c | 1 + lib/copp.h | 1 + northd/northd.c | 8 +++++--- ovn-nb.xml | 4 ++++ tests/ovn-northd.at | 2 +- tests/system-ovn.at | 20 +++++++++++++++++++- 6 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/copp.c b/lib/copp.c index 603e3f5bf..11dd9029d 100644 --- a/lib/copp.c +++ b/lib/copp.c @@ -38,6 +38,7 @@ static char *copp_proto_names[COPP_PROTO_MAX] = { [COPP_ND_RA_OPTS] = "nd-ra-opts", [COPP_TCP_RESET] = "tcp-reset", [COPP_REJECT] = "reject", + [COPP_SVC_MONITOR] = "svc-monitor", [COPP_BFD] = "bfd", }; diff --git a/lib/copp.h b/lib/copp.h index f03004aa6..b99737220 100644 --- a/lib/copp.h +++ b/lib/copp.h @@ -37,6 +37,7 @@ enum copp_proto { COPP_TCP_RESET, COPP_BFD, COPP_REJECT, + COPP_SVC_MONITOR, COPP_PROTO_MAX, COPP_PROTO_INVALID = COPP_PROTO_MAX, }; diff --git a/northd/northd.c b/northd/northd.c index 8519617de..b43a67b87 100644 --- a/northd/northd.c +++ b/northd/northd.c @@ -9804,9 +9804,11 @@ build_lswitch_destination_lookup_bmcast(struct ovn_datapath *od, { ovs_assert(od->nbs); - ovn_lflow_add(lflows, od, S_SWITCH_IN_L2_LKUP, 110, - "eth.dst == $svc_monitor_mac && (tcp || icmp || icmp6)", - "handle_svc_check(inport);"); + ovn_lflow_metered(lflows, od, S_SWITCH_IN_L2_LKUP, 110, + "eth.dst == $svc_monitor_mac && (tcp || icmp || icmp6)", + "handle_svc_check(inport);", + copp_meter_get(COPP_SVC_MONITOR, od->nbs->copp, + meter_groups)); struct mcast_switch_info *mcast_sw_info = &od->mcast_info.sw; diff --git a/ovn-nb.xml b/ovn-nb.xml index 4fbf4f7e5..b7ddd50c5 100644 --- a/ovn-nb.xml +++ b/ovn-nb.xml @@ -514,6 +514,10 @@ <column name="meters" key="reject"> Rate limiting meter for packets that trigger a reject action </column> + <column name="meters" key="svc-monitor"> + Rate limiting meter for packets that are arriving to service + monitor MAC address. + </column> <column name="external_ids"> See <em>External IDs</em> at the beginning of this document. </column> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at index aa59754c1..5c2b78f2f 100644 --- a/tests/ovn-northd.at +++ b/tests/ovn-northd.at @@ -3655,7 +3655,7 @@ AT_CHECK([ovn-sbctl list logical_flow | grep trigger_event -A 2 | grep -q meter0 # let's try to add an usupported protocol "dhcp" AT_CHECK([ovn-nbctl --wait=hv copp-add copp5 dhcp meter1],[1],[],[dnl -ovn-nbctl: Invalid control protocol. Allowed values: arp, arp-resolve, dhcpv4-opts, dhcpv6-opts, dns, event-elb, icmp4-error, icmp6-error, igmp, nd-na, nd-ns, nd-ns-resolve, nd-ra-opts, tcp-reset, bfd, reject. +ovn-nbctl: Invalid control protocol. Allowed values: arp, arp-resolve, dhcpv4-opts, dhcpv6-opts, dns, event-elb, icmp4-error, icmp6-error, igmp, nd-na, nd-ns, nd-ns-resolve, nd-ra-opts, tcp-reset, bfd, reject, svc-monitor. ]) #Let's try to add a valid protocol to an unknown datapath diff --git a/tests/system-ovn.at b/tests/system-ovn.at index 55c5ddc19..59d0cb2a0 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -7469,6 +7469,23 @@ OVS_WAIT_UNTIL([ ]) kill $(pidof tcpdump) +check ovn-nbctl set nb_global . options:svc_monitor_mac="33:33:33:33:33:33" +check ovn-nbctl meter-add svc-meter drop 1 pktps 0 +check ovn-nbctl --wait=hv copp-add copp4 svc-monitor svc-meter +check ovn-nbctl --wait=hv ls-copp-add copp4 sw0 +check ovn-appctl -t ovn-controller vlog/set vconn:dbg +AT_CHECK([ovn-nbctl copp-list copp4], [0], [dnl +svc-monitor: svc-meter +]) + +ip netns exec sw01 scapy -H <<-EOF +p = Ether(dst="33:33:33:33:33:33", src="f0:00:00:01:02:03") /\ + IP(dst="192.168.1.100", src="192.168.1.2") / TCP(dport=1234, sport=1234) +sendp(p, iface='sw01', loop=0, verbose=0, count=20) +EOF + +OVS_WAIT_UNTIL([test "1" = "$(grep -c "dl_dst=33:33:33:33:33:33" ovn-controller.log)"]) + OVS_APP_EXIT_AND_WAIT([ovn-controller]) as ovn-sb @@ -7482,7 +7499,8 @@ OVS_APP_EXIT_AND_WAIT([NORTHD_TYPE]) as OVS_TRAFFIC_VSWITCHD_STOP(["/.*error receiving.*/d -/.*terminating with signal 15.*/d"]) +/.*terminating with signal 15.*/d +/.*Service monitor not found/d"]) AT_CLEANUP ]) -- 2.40.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev