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;
}
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;
{
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;
}
}