/* Tunnel ID. */
case NFI_NXM_NX_TUN_ID:
- flow->tun_id = htonl(ntohll(get_unaligned_be64(value)));
+ flow->tun_id = get_unaligned_be64(value);
return 0;
/* Registers. */
p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
if (!p) {
- VLOG_DBG_RL(&rl, "nx_match length %zu, rounded up to a "
+ VLOG_DBG_RL(&rl, "nx_match length %u, rounded up to a "
"multiple of 8, is longer than space in message (max "
"length %zu)", match_len, b->size);
return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_BAD_LEN);
/* Tunnel ID. */
if (!(wc & FWW_TUN_ID)) {
- nxm_put_64(b, NXM_NX_TUN_ID, htonll(ntohl(flow->tun_id)));
+ nxm_put_64(b, NXM_NX_TUN_ID, flow->tun_id);
}
/* Registers. */
return 0;
}
-
-static const char *
-parse_hex_bytes(struct ofpbuf *b, const char *s, unsigned int n)
-{
- while (n--) {
- uint8_t byte;
- bool ok;
-
- s += strspn(s, " ");
- byte = hexits_value(s, 2, &ok);
- if (!ok) {
- ovs_fatal(0, "%.2s: hex digits expected", s);
- }
-
- ofpbuf_put(b, &byte, 1);
- s += 2;
- }
- return s;
-}
\f
/* nx_match_from_string(). */
const char *name;
uint32_t header;
int name_len;
+ size_t n;
name = s;
name_len = strcspn(s, "(");
s += name_len + 1;
nxm_put_header(b, header);
- s = parse_hex_bytes(b, s, nxm_field_bytes(header));
+ s = ofpbuf_put_hex(b, s, &n);
+ if (n != nxm_field_bytes(header)) {
+ ovs_fatal(0, "%.2s: hex digits expected", s);
+ }
if (NXM_HASMASK(header)) {
s += strspn(s, " ");
if (*s != '/') {
ovs_fatal(0, "%s: missing / in masked field %.*s",
full_s, name_len, name);
}
- s = parse_hex_bytes(b, s + 1, nxm_field_bytes(header));
+ s = ofpbuf_put_hex(b, s + 1, &n);
+ if (n != nxm_field_bytes(header)) {
+ ovs_fatal(0, "%.2s: hex digits expected", s);
+ }
}
s += strspn(s, " ");
}
if (n_bits < 64 && (value >> n_bits) != 0) {
- ovs_fatal(0, "%s: value %llu does not fit into %d bits",
+ ovs_fatal(0, "%s: value %"PRIu64" does not fit into %d bits",
full_s, value, n_bits);
}
return ntohs(flow->tp_dst) & 0xff;
case NFI_NXM_NX_TUN_ID:
- return ntohl(flow->tun_id);
+ return ntohll(flow->tun_id);
#define NXM_READ_REGISTER(IDX) \
case NFI_NXM_NX_REG##IDX: \
} else if (dst->header == NXM_OF_VLAN_TCI) {
flow->vlan_tci = htons(new_data);
} else if (dst->header == NXM_NX_TUN_ID) {
- flow->tun_id = htonl(new_data);
+ flow->tun_id = htonll(new_data);
} else {
NOT_REACHED();
}