X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fofp-print.c;h=f6560747e492076272167a3bc71b6ad24843c39a;hb=8e39921d51591d3eb59a6789104e53e170dd99cc;hp=1eaaa27d8f757bfd3aabd98a5433f96470d5eab0;hpb=eedc0097f475a15297375a2aba39313c0f98f330;p=openvswitch diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 1eaaa27d..f6560747 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -26,16 +26,17 @@ #include #include +#include "byte-order.h" #include "compiler.h" #include "dynamic-string.h" #include "flow.h" +#include "ofp-util.h" #include "ofpbuf.h" #include "openflow/openflow.h" #include "openflow/nicira-ext.h" #include "packets.h" #include "pcap.h" #include "util.h" -#include "xtoxll.h" static void ofp_print_port_name(struct ds *string, uint16_t port); static void ofp_print_queue_name(struct ds *string, uint32_t port); @@ -130,14 +131,13 @@ ofp_packet_in(struct ds *string, const void *oh, size_t len, int verbosity) ds_put_char(string, '\n'); if (verbosity > 0) { - flow_t flow; + struct flow flow; struct ofpbuf packet; - struct ofp_match match; + packet.data = (void *) op->data; packet.size = data_len; flow_extract(&packet, 0, ntohs(op->in_port), &flow); - flow_to_match(&flow, 0, false, &match); - ofp_print_match(string, &match, verbosity); + flow_format(string, &flow); ds_put_char(string, '\n'); } if (verbosity > 1) { @@ -183,6 +183,22 @@ static void ofp_print_port_name(struct ds *string, uint16_t port) ds_put_cstr(string, name); } +static void +print_note(struct ds *string, const struct nx_action_note *nan) +{ + size_t len; + size_t i; + + ds_put_cstr(string, "note:"); + len = ntohs(nan->len) - offsetof(struct nx_action_note, note); + for (i = 0; i < len; i++) { + if (i) { + ds_put_char(string, '.'); + } + ds_put_format(string, "%02"PRIx8, nan->note[i]); + } +} + static void ofp_print_nx_action(struct ds *string, const struct nx_action_header *nah) { @@ -216,6 +232,10 @@ ofp_print_nx_action(struct ds *string, const struct nx_action_header *nah) ds_put_cstr(string, "pop_queue"); break; + case NXAST_NOTE: + print_note(string, (const struct nx_action_note *) nah); + break; + default: ds_put_format(string, "***unknown Nicira action:%d***", ntohs(nah->subtype)); @@ -294,10 +314,10 @@ ofp_print_action(struct ds *string, const struct ofp_action_header *ah, return -1; } - if ((len % 8) != 0) { + if ((len % OFP_ACTION_ALIGN) != 0) { ds_put_format(string, - "***action %"PRIu16" length not a multiple of 8***\n", - type); + "***action %"PRIu16" length not a multiple of %d***\n", + type, OFP_ACTION_ALIGN); return -1; } @@ -737,10 +757,10 @@ ofp_match_to_string(const struct ofp_match *om, int verbosity) } else { print_wild(&f, "nw_proto=", w & OFPFW_NW_PROTO, verbosity, "%u", om->nw_proto); - print_wild(&f, "nw_tos=", w & OFPFW_NW_TOS, verbosity, - "%u", om->nw_tos); } } + print_wild(&f, "nw_tos=", w & OFPFW_NW_TOS, verbosity, + "%u", om->nw_tos); if (om->nw_proto == IP_TYPE_ICMP) { print_wild(&f, "icmp_type=", w & OFPFW_ICMP_TYPE, verbosity, "%d", ntohs(om->icmp_type)); @@ -1575,7 +1595,7 @@ ofp_to_string(const void *oh_, size_t len, int verbosity) } } - ds_put_format(&string, "%s (xid=0x%"PRIx32"):", pkt->name, oh->xid); + ds_put_format(&string, "%s (xid=0x%"PRIx32"):", pkt->name, ntohl(oh->xid)); if (ntohs(oh->length) > len) ds_put_format(&string, " (***truncated to %zu bytes from %"PRIu16"***)",