X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=lib%2Fdpif-netdev.c;h=742d00c69cc4c220953afb242947d18ed4fbaf52;hb=777507385a993b3ca072c512dac30ba1e6354b42;hp=eb101349f01a1416bde2da1520587b5f47813703;hpb=f4ebc25ea05ce635afeafdc089e6573c279c8cdf;p=openvswitch diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index eb101349..742d00c6 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -458,7 +458,8 @@ answer_port_query(const struct dp_netdev_port *port, struct dpif_port *dpif_port) { dpif_port->name = xstrdup(netdev_get_name(port->netdev)); - dpif_port->type = xstrdup(port->internal ? "internal" : "system"); + dpif_port->type = xstrdup(port->internal ? "internal" + : netdev_get_type(port->netdev)); dpif_port->port_no = port->port_no; } @@ -550,7 +551,8 @@ dpif_netdev_port_dump_next(const struct dpif *dpif, void *state_, free(state->name); state->name = xstrdup(netdev_get_name(port->netdev)); dpif_port->name = state->name; - dpif_port->type = port->internal ? "internal" : "system"; + dpif_port->type = (char *) (port->internal ? "internal" + : netdev_get_type(port->netdev)); dpif_port->port_no = port->port_no; state->port_no = port_no + 1; return 0; @@ -1135,11 +1137,21 @@ dp_netdev_set_udp_port(struct ofpbuf *packet, const struct ovs_key_udp *udp_key) { struct udp_header *uh = packet->l4; - if (uh->udp_src != udp_key->udp_src) { - dp_netdev_set_port(&uh->udp_src, udp_key->udp_src, &uh->udp_csum); - } - if (uh->udp_dst != udp_key->udp_dst) { - dp_netdev_set_port(&uh->udp_dst, udp_key->udp_dst, &uh->udp_csum); + if (uh->udp_csum) { + if (uh->udp_src != udp_key->udp_src) { + dp_netdev_set_port(&uh->udp_src, udp_key->udp_src, &uh->udp_csum); + } + + if (uh->udp_dst != udp_key->udp_dst) { + dp_netdev_set_port(&uh->udp_dst, udp_key->udp_dst, &uh->udp_csum); + } + + if (!uh->udp_csum) { + uh->udp_csum = htons(0xffff); + } + } else { + uh->udp_src = udp_key->udp_src; + uh->udp_dst = udp_key->udp_dst; } }