{
struct ofputil_packet_in pin;
int error;
+ int i;
error = ofputil_decode_packet_in(&pin, oh);
if (error) {
return;
}
+ if (pin.table_id) {
+ ds_put_format(string, " table_id=%"PRIu8, pin.table_id);
+ }
+
+ if (pin.cookie) {
+ ds_put_format(string, " cookie=0x%"PRIx64, ntohll(pin.cookie));
+ }
+
ds_put_format(string, " total_len=%"PRIu16" in_port=", pin.total_len);
- ofputil_format_port(pin.in_port, string);
+ ofputil_format_port(pin.fmd.in_port, string);
+
+ if (pin.fmd.tun_id_mask) {
+ ds_put_format(string, " tun_id=0x%"PRIx64, ntohll(pin.fmd.tun_id));
+ if (pin.fmd.tun_id_mask != htonll(UINT64_MAX)) {
+ ds_put_format(string, "/0x%"PRIx64, ntohll(pin.fmd.tun_id_mask));
+ }
+ }
+
+ for (i = 0; i < FLOW_N_REGS; i++) {
+ if (pin.fmd.reg_masks[i]) {
+ ds_put_format(string, " reg%d=0x%"PRIx32, i, pin.fmd.regs[i]);
+ if (pin.fmd.reg_masks[i] != UINT32_MAX) {
+ ds_put_format(string, "/0x%"PRIx32, pin.fmd.reg_masks[i]);
+ }
+ }
+ }
if (pin.reason == OFPR_ACTION) {
ds_put_cstr(string, " (via action)");
}
}
+static void
+ofp_print_nxt_set_packet_in_format(struct ds *string,
+ const struct nxt_set_packet_in_format *nspf)
+{
+ uint32_t format = ntohl(nspf->format);
+
+ ds_put_cstr(string, " format=");
+ if (ofputil_packet_in_format_is_valid(format)) {
+ ds_put_cstr(string, ofputil_packet_in_format_to_string(format));
+ } else {
+ ds_put_format(string, "%"PRIu32, format);
+ }
+}
+
static void
ofp_to_string__(const struct ofp_header *oh,
const struct ofputil_msg_type *type, struct ds *string,
break;
case OFPUTIL_OFPT_PACKET_IN:
+ case OFPUTIL_NXT_PACKET_IN:
ofp_print_packet_in(string, msg, verbosity);
break;
ofp_print_nxt_set_flow_format(string, msg);
break;
+ case OFPUTIL_NXT_SET_PACKET_IN_FORMAT:
+ ofp_print_nxt_set_packet_in_format(string, msg);
+ break;
+
case OFPUTIL_NXT_FLOW_MOD:
ofp_print_flow_mod(string, msg, code, verbosity);
break;