[ovs-dev] [warnings2 2/4] nx-match: Check prerequisites for ICMPv6 before outputting subfields.
Ethan Jackson
ethan at nicira.com
Wed May 18 01:39:40 UTC 2011
Looks Good.
Ethan
On Tue, May 10, 2011 at 09:07, Ben Pfaff <blp at nicira.com> wrote:
> nicira-ext.h documents that NXM_NX_ND_TARGET requires ND_NEIGHBOR_SOLICIT
> or ND_NEIGHBOR_ADVERT, that NXM_NX_ND_SLL requires ND_NEIGHBOR_SOLICIT,
> and that NXM_NX_ND_TLL requires ND_NEIGHBOR_ADVERT, but nx_put_match()
> would add them to the match regardless of whether these prerequisites were
> satisfied. On the other side, nx_pull_match() did check the prerequisites,
> so this was a case where OVS could output flows that it would refused to
> parse. This fixes the problem.
>
> Found by inspection.
> ---
> lib/nx-match.c | 26 ++++++++++++++++----------
> 1 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/lib/nx-match.c b/lib/nx-match.c
> index 4d2e590..86713ab 100644
> --- a/lib/nx-match.c
> +++ b/lib/nx-match.c
> @@ -839,20 +839,26 @@ nx_put_match(struct ofpbuf *b, const struct cls_rule *cr)
> case IPPROTO_ICMPV6:
> if (!(wc & FWW_TP_SRC)) {
> nxm_put_8(b, NXM_NX_ICMPV6_TYPE, ntohs(flow->tp_src));
> +
> + if (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
> + flow->tp_src == htons(ND_NEIGHBOR_ADVERT)) {
> + if (!(wc & FWW_ND_TARGET)) {
> + nxm_put_ipv6(b, NXM_NX_ND_TARGET, &flow->nd_target,
> + &in6addr_exact);
> + }
> + if (!(wc & FWW_ARP_SHA)
> + && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
> + nxm_put_eth(b, NXM_NX_ND_SLL, flow->arp_sha);
> + }
> + if (!(wc & FWW_ARP_THA)
> + && flow->tp_src == htons(ND_NEIGHBOR_ADVERT)) {
> + nxm_put_eth(b, NXM_NX_ND_TLL, flow->arp_tha);
> + }
> + }
> }
> if (!(wc & FWW_TP_DST)) {
> nxm_put_8(b, NXM_NX_ICMPV6_CODE, ntohs(flow->tp_dst));
> }
> - if (!(wc & FWW_ND_TARGET)) {
> - nxm_put_ipv6(b, NXM_NX_ND_TARGET, &flow->nd_target,
> - &in6addr_exact);
> - }
> - if (!(wc & FWW_ARP_SHA)) {
> - nxm_put_eth(b, NXM_NX_ND_SLL, flow->arp_sha);
> - }
> - if (!(wc & FWW_ARP_THA)) {
> - nxm_put_eth(b, NXM_NX_ND_TLL, flow->arp_tha);
> - }
> break;
> }
> }
> --
> 1.7.4.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
More information about the dev
mailing list