port->internal = internal;
netdev_get_mtu(netdev, &mtu);
- if (mtu > max_mtu) {
+ if (mtu != INT_MAX && mtu > max_mtu) {
max_mtu = mtu;
}
uint32_t bucket;
uint32_t offset;
struct nlattr *actions;
- uint32_t keybuf[ODPUTIL_FLOW_KEY_U32S];
+ struct odputil_keybuf keybuf;
struct dpif_flow_stats stats;
};
if (key) {
struct ofpbuf buf;
- ofpbuf_use_stack(&buf, state->keybuf, sizeof state->keybuf);
+ ofpbuf_use_stack(&buf, &state->keybuf, sizeof state->keybuf);
odp_flow_key_from_flow(&buf, &flow->key);
- assert(buf.base == state->keybuf);
*key = buf.data;
*key_len = buf.size;
uint32_t *field;
field = type == ODP_ACTION_ATTR_SET_NW_SRC ? &nh->ip_src : &nh->ip_dst;
- if (key->nw_proto == IP_TYPE_TCP && packet->l7) {
+ if (key->nw_proto == IPPROTO_TCP && packet->l7) {
struct tcp_header *th = packet->l4;
th->tcp_csum = recalc_csum32(th->tcp_csum, *field, ip);
- } else if (key->nw_proto == IP_TYPE_UDP && packet->l7) {
+ } else if (key->nw_proto == IPPROTO_UDP && packet->l7) {
struct udp_header *uh = packet->l4;
if (uh->udp_csum) {
uh->udp_csum = recalc_csum32(uh->udp_csum, *field, ip);
upcall->key_len = key_len;
upcall->userdata = arg;
- q->upcalls[++q->head & QUEUE_MASK] = upcall;
+ q->upcalls[q->head++ & QUEUE_MASK] = upcall;
return 0;
}