# HG changeset patch # User akshay.kale@oracle.com # Date 1465509225 25200 # Node ID 50085258c4b0168fbffd2ad328791b444adad69a # Parent 7e27d23491c56e01a2da568fc101204951da241c 22920349 provide support for Neighbor Discovery for IPv6 in OVS diff -r 7e27d23491c5 -r 50085258c4b0 components/openvswitch/files/lib/util-solaris.c --- a/components/openvswitch/files/lib/util-solaris.c Thu Jun 09 14:18:41 2016 -0700 +++ b/components/openvswitch/files/lib/util-solaris.c Thu Jun 09 14:53:45 2016 -0700 @@ -1565,6 +1565,36 @@ if (err != 0) goto out; } + + flow_mac2str(f->arp_sha, m->arp_sha, buf, rbuf, + sizeof (buf), sizeof (rbuf)); + if (strlen(buf) != 0) { + err = dlmgr_DLValue_fm_putstring(ddvp, ddmp, + "nd-sll", buf, rbuf, + dstr, sizeof (dstr)); + if (err != 0) + goto out; + } + + flow_mac2str(f->arp_tha, m->arp_tha, buf, rbuf, + sizeof (buf), sizeof (rbuf)); + if (strlen(buf) != 0) { + err = dlmgr_DLValue_fm_putstring(ddvp, ddmp, + "nd-tll", buf, rbuf, + dstr, sizeof (dstr)); + if (err != 0) + goto out; + } + + flow_addr2str(&f->nd_target, &m->nd_target, 0, 0, + buf, rbuf, sizeof (buf), sizeof (rbuf)); + if (strlen(buf) != 0) { + err = dlmgr_DLValue_fm_putstring(ddvp, ddmp, + "nd-target", buf, rbuf, + dstr, sizeof (dstr)); + if (err != 0) + goto out; + } } } @@ -2251,9 +2281,11 @@ f->nw_tos = (uint8_t)*val->ddlv_ulval; } else if (strcmp(key, "srcport") == 0) { f->in_port.odp_port = (odp_port_t)*val->ddlv_ulval; - } else if (strcmp(key, "arp-target") == 0) { + } else if (strcmp(key, "arp-target") == 0 || + strcmp(key, "nd-tll") == 0) { err = flow_str2mac(val->ddlv_sval, f->arp_tha, 6); - } else if (strcmp(key, "arp-sender") == 0) { + } else if (strcmp(key, "arp-sender") == 0 || + strcmp(key, "nd-sll") == 0) { err = flow_str2mac(val->ddlv_sval, f->arp_sha, 6); } else if (strcmp(key, "arp-op") == 0) { f->nw_proto = (uint8_t)*val->ddlv_ulval; @@ -2267,6 +2299,11 @@ f->tp_src = htons((uint16_t)*val->ddlv_ulval); } else if (strcmp(key, "icmp-code") == 0) { f->tp_dst = htons((uint16_t)*val->ddlv_ulval); + } else if (strcmp(key, "nd-target") == 0) { + err = flow_str2addr(val->ddlv_sval, &fa, &af); + if (err != 0) + goto out; + bcopy(&fa, &f->nd_target, sizeof (f->nd_target)); } else if (strcmp(key, "tcp-flags") == 0) { f->tcp_flags = htons((uint16_t)*val->ddlv_ulval); }