X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fdpif-netdev.c;h=8bd9648de2dbeefd35fe72fbc2bc415a41d7eda3;hb=1c617a495fdc6bb91e29bf00df4c837f63d63199;hp=cae6d2319a83a9d1eb4dae5f7116da9e0043a92d;hpb=d3d22744a7408ec3d6d9eac255862b5761166c2d;p=openvswitch diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index cae6d231..8bd9648d 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -23,15 +23,11 @@ #include #include #include -#include -#include -#include #include #include #include #include #include -#include #include #include "csum.h" @@ -160,7 +156,7 @@ get_dp_netdev(const struct dpif *dpif) static int name_to_dp_idx(const char *name) { - if (!strncmp(name, "dp", 2) && isdigit(name[2])) { + if (!strncmp(name, "dp", 2) && isdigit((unsigned char)name[2])) { int dp_idx = atoi(name + 2); if (dp_idx >= 0 && dp_idx < N_DP_NETDEVS) { return dp_idx; @@ -223,7 +219,7 @@ create_dp_netdev(const char *name, int dp_idx, struct dpif **dpifp) } /* Create datapath. */ - dp_netdevs[dp_idx] = dp = xcalloc(1, sizeof *dp); + dp_netdevs[dp_idx] = dp = xzalloc(sizeof *dp); list_push_back(&dp_netdev_list, &dp->node); dp->dp_idx = dp_idx; dp->open_cnt = 0; @@ -377,7 +373,9 @@ do_add_port(struct dp_netdev *dp, const char *devname, uint16_t flags, if (!internal) { error = netdev_open(devname, NETDEV_ETH_TYPE_ANY, &netdev); } else { - error = netdev_open_tap(devname, &netdev); + char *tapname = xasprintf("tap:%s", devname); + error = netdev_open(tapname, NETDEV_ETH_TYPE_ANY, &netdev); + free(tapname); } if (error) { return error; @@ -396,7 +394,7 @@ do_add_port(struct dp_netdev *dp, const char *devname, uint16_t flags, port->netdev = netdev; port->internal = internal; - mtu = netdev_get_mtu(netdev); + netdev_get_mtu(netdev, &mtu); if (mtu > max_mtu) { max_mtu = mtu; } @@ -422,7 +420,7 @@ dpif_netdev_port_add(struct dpif *dpif, const char *devname, uint16_t flags, return do_add_port(dp, devname, flags, port_no); } } - return EXFULL; + return EFBIG; } static int @@ -790,7 +788,7 @@ add_flow(struct dpif *dpif, struct odp_flow *odp_flow) struct dp_netdev_flow *flow; int error; - flow = xcalloc(1, sizeof *flow); + flow = xzalloc(sizeof *flow); flow->key = odp_flow->key; flow->key.reserved = 0; @@ -827,7 +825,7 @@ dpif_netdev_flow_put(struct dpif *dpif, struct odp_flow_put *put) if (hmap_count(&dp->flow_table) < MAX_FLOWS) { return add_flow(dpif, &put->flow); } else { - return EXFULL; + return EFBIG; } } else { return ENOENT; @@ -890,7 +888,7 @@ dpif_netdev_execute(struct dpif *dpif, uint16_t in_port, flow_t flow; int error; - if (packet->size < ETH_HLEN || packet->size > UINT16_MAX) { + if (packet->size < ETH_HEADER_LEN || packet->size > UINT16_MAX) { return EINVAL; } @@ -988,7 +986,7 @@ dp_netdev_flow_used(struct dp_netdev_flow *flow, const flow_t *key, time_timeval(&flow->used); flow->packet_count++; flow->byte_count += packet->size; - if (key->dl_type == htons(ETH_P_IP)) { + if (key->dl_type == htons(ETH_TYPE_IP)) { struct ip_header *nh = packet->l3; flow->ip_tos = nh->ip_tos; @@ -1161,7 +1159,7 @@ static void dp_netdev_set_tp_port(struct ofpbuf *packet, flow_t *key, const struct odp_action_tp_port *a) { - if (key->dl_type == htons(ETH_P_IP)) { + if (key->dl_type == htons(ETH_TYPE_IP)) { uint16_t *field; if (key->nw_proto == IPPROTO_TCP) { struct tcp_header *th = packet->l4;