summaryrefslogtreecommitdiff
path: root/lib/ofp-print.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ofp-print.c')
-rw-r--r--lib/ofp-print.c202
1 files changed, 130 insertions, 72 deletions
diff --git a/lib/ofp-print.c b/lib/ofp-print.c
index 639d3bddf..dede3197c 100644
--- a/lib/ofp-print.c
+++ b/lib/ofp-print.c
@@ -119,7 +119,8 @@ format_hex_arg(struct ds *s, const uint8_t *data, size_t len)
static enum ofperr
ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map, int verbosity)
{
char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
struct ofputil_packet_in_private pin;
@@ -134,8 +135,10 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
return error;
}
- if (public->table_id) {
- ds_put_format(string, " table_id=%"PRIu8, public->table_id);
+ if (public->table_id
+ || ofputil_table_map_get_name(table_map, public->table_id)) {
+ ds_put_format(string, " table_id=");
+ ofputil_format_table(public->table_id, table_map, string);
}
if (public->cookie != OVS_BE64_MAX) {
@@ -207,6 +210,7 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = string,
};
@@ -240,7 +244,8 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh,
static enum ofperr
ofp_print_packet_out(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map, int verbosity)
{
struct ofputil_packet_out po;
struct ofpbuf ofpacts;
@@ -259,6 +264,7 @@ ofp_print_packet_out(struct ds *string, const struct ofp_header *oh,
ds_put_cstr(string, " actions=");
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = string,
};
ofpacts_format(po.ofpacts, po.ofpacts_len, &fp);
@@ -815,7 +821,8 @@ ofp_print_flow_flags(struct ds *s, enum ofputil_flow_mod_flags flags)
static enum ofperr
ofp_print_flow_mod(struct ds *s, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map, int verbosity)
{
struct ofputil_flow_mod fm;
struct ofpbuf ofpacts;
@@ -855,8 +862,10 @@ ofp_print_flow_mod(struct ds *s, const struct ofp_header *oh,
default:
ds_put_format(s, "cmd:%d", fm.command);
}
- if (fm.table_id != 0) {
- ds_put_format(s, " table:%d", fm.table_id);
+ if (fm.table_id != 0
+ || ofputil_table_map_get_name(table_map, fm.table_id)) {
+ ds_put_format(s, " table:");
+ ofputil_format_table(fm.table_id, table_map, s);
}
ds_put_char(s, ' ');
@@ -927,6 +936,7 @@ ofp_print_flow_mod(struct ds *s, const struct ofp_header *oh,
ds_put_cstr(s, "actions=");
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = s,
};
ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
@@ -994,7 +1004,8 @@ ofp_flow_removed_reason_to_string(enum ofp_flow_removed_reason reason,
static enum ofperr
ofp_print_flow_removed(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
struct ofputil_flow_removed fr;
@@ -1013,7 +1024,8 @@ ofp_print_flow_removed(struct ds *string, const struct ofp_header *oh,
sizeof reasonbuf));
if (fr.table_id != 255) {
- ds_put_format(string, " table_id=%"PRIu8, fr.table_id);
+ ds_put_format(string, " table_id=");
+ ofputil_format_table(fr.table_id, table_map, string);
}
if (fr.cookie != htonll(0)) {
@@ -1133,7 +1145,8 @@ ofputil_table_vacancy_to_string(enum ofputil_table_vacancy vacancy)
}
static enum ofperr
-ofp_print_table_mod(struct ds *string, const struct ofp_header *oh)
+ofp_print_table_mod(struct ds *string, const struct ofp_header *oh,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_table_mod pm;
enum ofperr error;
@@ -1146,7 +1159,8 @@ ofp_print_table_mod(struct ds *string, const struct ofp_header *oh)
if (pm.table_id == 0xff) {
ds_put_cstr(string, " table_id: ALL_TABLES");
} else {
- ds_put_format(string, " table_id=%"PRIu8, pm.table_id);
+ ds_put_format(string, " table_id=");
+ ofputil_format_table(pm.table_id, table_map, string);
}
if (pm.miss != OFPUTIL_TABLE_MISS_DEFAULT) {
@@ -1176,9 +1190,11 @@ ofp_print_table_mod(struct ds *string, const struct ofp_header *oh)
/* This function will print the Table description properties. */
static void
-ofp_print_table_desc(struct ds *string, const struct ofputil_table_desc *td)
+ofp_print_table_desc(struct ds *string, const struct ofputil_table_desc *td,
+ const struct ofputil_table_map *table_map)
{
- ds_put_format(string, "\n table %"PRIu8, td->table_id);
+ ds_put_format(string, "\n table ");
+ ofputil_format_table(td->table_id, table_map, string);
ds_put_cstr(string, ":\n");
ds_put_format(string, " eviction=%s eviction_flags=",
ofputil_table_eviction_to_string(td->eviction));
@@ -1198,7 +1214,8 @@ ofp_print_table_desc(struct ds *string, const struct ofputil_table_desc *td)
}
static enum ofperr
-ofp_print_table_status_message(struct ds *string, const struct ofp_header *oh)
+ofp_print_table_status_message(struct ds *string, const struct ofp_header *oh,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_table_status ts;
enum ofperr error;
@@ -1215,7 +1232,7 @@ ofp_print_table_status_message(struct ds *string, const struct ofp_header *oh)
}
ds_put_format(string, "\ntable_desc:-");
- ofp_print_table_desc(string, &ts.desc);
+ ofp_print_table_desc(string, &ts.desc, table_map);
return 0;
}
@@ -1606,7 +1623,8 @@ ofp_print_hello(struct ds *string, const struct ofp_header *oh)
static enum ofperr
ofp_print_error_msg(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf payload;
enum ofperr error;
@@ -1622,7 +1640,7 @@ ofp_print_error_msg(struct ds *string, const struct ofp_header *oh,
if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
ds_put_printable(string, payload.data, payload.size);
} else {
- s = ofp_to_string(payload.data, payload.size, port_map, 1);
+ s = ofp_to_string(payload.data, payload.size, port_map, table_map, 1);
ds_put_cstr(string, s);
free(s);
}
@@ -1676,7 +1694,8 @@ ofp_print_ofpst_desc_reply(struct ds *string, const struct ofp_header *oh)
static enum ofperr
ofp_print_flow_stats_request(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_flow_stats_request fsr;
enum ofperr error;
@@ -1687,7 +1706,8 @@ ofp_print_flow_stats_request(struct ds *string, const struct ofp_header *oh,
}
if (fsr.table_id != 0xff) {
- ds_put_format(string, " table=%"PRIu8, fsr.table_id);
+ ds_put_format(string, " table=");
+ ofputil_format_table(fsr.table_id, table_map, string);
}
if (fsr.out_port != OFPP_ANY) {
@@ -1707,7 +1727,9 @@ ofp_print_flow_stats_request(struct ds *string, const struct ofp_header *oh,
* ages, otherwise they are omitted. */
void
ofp_print_flow_stats(struct ds *string, const struct ofputil_flow_stats *fs,
- const struct ofputil_port_map *port_map, bool show_stats)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map,
+ bool show_stats)
{
if (show_stats || fs->cookie) {
ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
@@ -1719,9 +1741,11 @@ ofp_print_flow_stats(struct ds *string, const struct ofputil_flow_stats *fs,
ds_put_cstr(string, ", ");
}
- if (show_stats || fs->table_id) {
- ds_put_format(string, "%stable=%s%"PRIu8", ",
- colors.special, colors.end, fs->table_id);
+ if (show_stats || fs->table_id
+ || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
+ ds_put_format(string, "%stable=%s", colors.special, colors.end);
+ ofputil_format_table(fs->table_id, table_map, string);
+ ds_put_cstr(string, ", ");
}
if (show_stats) {
ds_put_format(string, "%sn_packets=%s%"PRIu64", ",
@@ -1764,6 +1788,7 @@ ofp_print_flow_stats(struct ds *string, const struct ofputil_flow_stats *fs,
ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = string,
};
ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
@@ -1771,7 +1796,8 @@ ofp_print_flow_stats(struct ds *string, const struct ofputil_flow_stats *fs,
static enum ofperr
ofp_print_flow_stats_reply(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
struct ofpbuf ofpacts;
@@ -1786,7 +1812,7 @@ ofp_print_flow_stats_reply(struct ds *string, const struct ofp_header *oh,
break;
}
ds_put_cstr(string, "\n ");
- ofp_print_flow_stats(string, &fs, port_map, true);
+ ofp_print_flow_stats(string, &fs, port_map, table_map, true);
}
ofpbuf_uninit(&ofpacts);
@@ -1991,7 +2017,8 @@ ofp_print_ofpst_port_reply(struct ds *string, const struct ofp_header *oh,
}
static enum ofperr
-ofp_print_table_stats_reply(struct ds *string, const struct ofp_header *oh)
+ofp_print_table_stats_reply(struct ds *string, const struct ofp_header *oh,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
ofpraw_pull_assert(&b);
@@ -2011,7 +2038,8 @@ ofp_print_table_stats_reply(struct ds *string, const struct ofp_header *oh)
ds_put_char(string, '\n');
ofp_print_table_features(string,
&features, i ? &prev_features : NULL,
- &stats, i ? &prev_stats : NULL);
+ &stats, i ? &prev_stats : NULL,
+ table_map);
prev_features = features;
prev_stats = stats;
}
@@ -2469,7 +2497,8 @@ nx_flow_monitor_flags_to_name(uint32_t bit)
static enum ofperr
ofp_print_nxst_flow_monitor_request(struct ds *string,
const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
for (;;) {
@@ -2491,7 +2520,8 @@ ofp_print_nxst_flow_monitor_request(struct ds *string,
}
if (request.table_id != 0xff) {
- ds_put_format(string, " table=%"PRIu8, request.table_id);
+ ds_put_format(string, " table=");
+ ofputil_format_table(request.table_id, table_map, string);
}
ds_put_char(string, ' ');
@@ -2503,7 +2533,8 @@ ofp_print_nxst_flow_monitor_request(struct ds *string,
static enum ofperr
ofp_print_nxst_flow_monitor_reply(struct ds *string,
const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
uint64_t ofpacts_stub[1024 / 8];
struct ofpbuf ofpacts = OFPBUF_STUB_INITIALIZER(ofpacts_stub);
@@ -2542,7 +2573,8 @@ ofp_print_nxst_flow_monitor_reply(struct ds *string,
continue;
}
- ds_put_format(string, " table=%"PRIu8, update.table_id);
+ ds_put_format(string, " table=");
+ ofputil_format_table(update.table_id, table_map, string);
if (update.idle_timeout != OFP_FLOW_PERMANENT) {
ds_put_format(string, " idle_timeout=%"PRIu16,
update.idle_timeout);
@@ -2563,6 +2595,7 @@ ofp_print_nxst_flow_monitor_reply(struct ds *string,
ds_put_cstr(string, "actions=");
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = string,
};
ofpacts_format(update.ofpacts, update.ofpacts_len, &fp);
@@ -2643,7 +2676,8 @@ ofp_print_group(struct ds *s, uint32_t group_id, uint8_t type,
const struct ovs_list *p_buckets,
const struct ofputil_group_props *props,
enum ofp_version ofp_version, bool suppress_type,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_bucket *bucket;
@@ -2698,6 +2732,7 @@ ofp_print_group(struct ds *s, uint32_t group_id, uint8_t type,
ds_put_cstr(s, "actions=");
struct ofpact_format_params fp = {
.port_map = port_map,
+ .table_map = table_map,
.s = s,
};
ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
@@ -2720,7 +2755,8 @@ ofp_print_ofpst_group_desc_request(struct ds *string,
static enum ofperr
ofp_print_group_desc(struct ds *s, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
for (;;) {
@@ -2735,7 +2771,7 @@ ofp_print_group_desc(struct ds *s, const struct ofp_header *oh,
ds_put_char(s, '\n');
ds_put_char(s, ' ');
ofp_print_group(s, gd.group_id, gd.type, &gd.buckets, &gd.props,
- oh->version, false, port_map);
+ oh->version, false, port_map, table_map);
ofputil_uninit_group_desc(&gd);
}
}
@@ -2842,7 +2878,8 @@ ofp_print_group_features(struct ds *string, const struct ofp_header *oh)
static void
ofp_print_group_mod__(struct ds *s, enum ofp_version ofp_version,
const struct ofputil_group_mod *gm,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
bool bucket_command = false;
@@ -2887,12 +2924,13 @@ ofp_print_group_mod__(struct ds *s, enum ofp_version ofp_version,
}
ofp_print_group(s, gm->group_id, gm->type, &gm->buckets, &gm->props,
- ofp_version, bucket_command, port_map);
+ ofp_version, bucket_command, port_map, table_map);
}
static enum ofperr
ofp_print_group_mod(struct ds *s, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_group_mod gm;
int error;
@@ -2901,7 +2939,7 @@ ofp_print_group_mod(struct ds *s, const struct ofp_header *oh,
if (error) {
return error;
}
- ofp_print_group_mod__(s, oh->version, &gm, port_map);
+ ofp_print_group_mod__(s, oh->version, &gm, port_map, table_map);
ofputil_uninit_group_mod(&gm);
return 0;
}
@@ -3071,11 +3109,13 @@ ofp_print_table_features(struct ds *s,
const struct ofputil_table_features *features,
const struct ofputil_table_features *prev_features,
const struct ofputil_table_stats *stats,
- const struct ofputil_table_stats *prev_stats)
+ const struct ofputil_table_stats *prev_stats,
+ const struct ofputil_table_map *table_map)
{
int i;
- ds_put_format(s, " table %"PRIu8, features->table_id);
+ ds_put_format(s, " table ");
+ ofputil_format_table(features->table_id, table_map, s);
if (features->name[0]) {
ds_put_format(s, " (\"%s\")", features->name);
}
@@ -3170,7 +3210,8 @@ ofp_print_table_features(struct ds *s,
}
static enum ofperr
-ofp_print_table_features_reply(struct ds *s, const struct ofp_header *oh)
+ofp_print_table_features_reply(struct ds *s, const struct ofp_header *oh,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
@@ -3185,13 +3226,15 @@ ofp_print_table_features_reply(struct ds *s, const struct ofp_header *oh)
}
ds_put_char(s, '\n');
- ofp_print_table_features(s, &tf, i ? &prev : NULL, NULL, NULL);
+ ofp_print_table_features(s, &tf, i ? &prev : NULL, NULL, NULL,
+ table_map);
prev = tf;
}
}
static enum ofperr
-ofp_print_table_desc_reply(struct ds *s, const struct ofp_header *oh)
+ofp_print_table_desc_reply(struct ds *s, const struct ofp_header *oh,
+ const struct ofputil_table_map *table_map)
{
struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
for (;;) {
@@ -3202,7 +3245,7 @@ ofp_print_table_desc_reply(struct ds *s, const struct ofp_header *oh)
if (retval) {
return retval != EOF ? retval : 0;
}
- ofp_print_table_desc(s, &td);
+ ofp_print_table_desc(s, &td, table_map);
}
}
@@ -3268,7 +3311,9 @@ ofp_print_bundle_ctrl(struct ds *s, const struct ofp_header *oh)
static enum ofperr
ofp_print_bundle_add(struct ds *s, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map,
+ int verbosity)
{
int error;
struct ofputil_bundle_add_msg badd;
@@ -3285,7 +3330,7 @@ ofp_print_bundle_add(struct ds *s, const struct ofp_header *oh,
ds_put_char(s, '\n');
char *msg = ofp_to_string(badd.msg, ntohs(badd.msg->length), port_map,
- verbosity);
+ table_map, verbosity);
ds_put_and_free_cstr(s, msg);
return 0;
@@ -3376,7 +3421,8 @@ ofp_print_tlv_table_reply(struct ds *s, const struct ofp_header *oh)
* request forward is taken from rf.request.type */
static enum ofperr
ofp_print_requestforward(struct ds *string, const struct ofp_header *oh,
- const struct ofputil_port_map *port_map)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map)
{
struct ofputil_requestforward rf;
enum ofperr error;
@@ -3391,7 +3437,8 @@ ofp_print_requestforward(struct ds *string, const struct ofp_header *oh,
switch (rf.reason) {
case OFPRFR_GROUP_MOD:
ds_put_cstr(string, "group_mod");
- ofp_print_group_mod__(string, oh->version, rf.group_mod, port_map);
+ ofp_print_group_mod__(string, oh->version, rf.group_mod, port_map,
+ table_map);
break;
case OFPRFR_METER_MOD:
@@ -3491,7 +3538,8 @@ ofp_print_nxt_ct_flush_zone(struct ds *string, const struct nx_zone_id *nzi)
static enum ofperr
ofp_to_string__(const struct ofp_header *oh,
- const struct ofputil_port_map *port_map, enum ofpraw raw,
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map, enum ofpraw raw,
struct ds *string, int verbosity)
{
const void *msg = oh;
@@ -3509,7 +3557,7 @@ ofp_to_string__(const struct ofp_header *oh,
return ofp_print_ofpst_group_desc_request(string, oh);
case OFPTYPE_GROUP_DESC_STATS_REPLY:
- return ofp_print_group_desc(string, oh, port_map);
+ return ofp_print_group_desc(string, oh, port_map, table_map);
case OFPTYPE_GROUP_FEATURES_STATS_REQUEST:
ofp_print_stats(string, oh);
@@ -3519,21 +3567,21 @@ ofp_to_string__(const struct ofp_header *oh,
return ofp_print_group_features(string, oh);
case OFPTYPE_GROUP_MOD:
- return ofp_print_group_mod(string, oh, port_map);
+ return ofp_print_group_mod(string, oh, port_map, table_map);
case OFPTYPE_TABLE_FEATURES_STATS_REQUEST:
case OFPTYPE_TABLE_FEATURES_STATS_REPLY:
- return ofp_print_table_features_reply(string, oh);
+ return ofp_print_table_features_reply(string, oh, table_map);
case OFPTYPE_TABLE_DESC_REQUEST:
case OFPTYPE_TABLE_DESC_REPLY:
- return ofp_print_table_desc_reply(string, oh);
+ return ofp_print_table_desc_reply(string, oh, table_map);
case OFPTYPE_HELLO:
return ofp_print_hello(string, oh);
case OFPTYPE_ERROR:
- return ofp_print_error_msg(string, oh, port_map);
+ return ofp_print_error_msg(string, oh, port_map, table_map);
case OFPTYPE_ECHO_REQUEST:
case OFPTYPE_ECHO_REPLY:
@@ -3555,25 +3603,26 @@ ofp_to_string__(const struct ofp_header *oh,
return ofp_print_set_config(string, oh);
case OFPTYPE_PACKET_IN:
- return ofp_print_packet_in(string, oh, port_map, verbosity);
+ return ofp_print_packet_in(string, oh, port_map, table_map, verbosity);
case OFPTYPE_FLOW_REMOVED:
- return ofp_print_flow_removed(string, oh, port_map);
+ return ofp_print_flow_removed(string, oh, port_map, table_map);
case OFPTYPE_PORT_STATUS:
return ofp_print_port_status(string, oh);
case OFPTYPE_PACKET_OUT:
- return ofp_print_packet_out(string, oh, port_map, verbosity);
+ return ofp_print_packet_out(string, oh, port_map, table_map,
+ verbosity);
case OFPTYPE_FLOW_MOD:
- return ofp_print_flow_mod(string, oh, port_map, verbosity);
+ return ofp_print_flow_mod(string, oh, port_map, table_map, verbosity);
case OFPTYPE_PORT_MOD:
return ofp_print_port_mod(string, oh, port_map);
case OFPTYPE_TABLE_MOD:
- return ofp_print_table_mod(string, oh);
+ return ofp_print_table_mod(string, oh, table_map);
case OFPTYPE_METER_MOD:
return ofp_print_meter_mod(string, oh);
@@ -3595,10 +3644,10 @@ ofp_to_string__(const struct ofp_header *oh,
return ofp_print_role_status_message(string, oh);
case OFPTYPE_REQUESTFORWARD:
- return ofp_print_requestforward(string, oh, port_map);
+ return ofp_print_requestforward(string, oh, port_map, table_map);
case OFPTYPE_TABLE_STATUS:
- return ofp_print_table_status_message(string, oh);
+ return ofp_print_table_status_message(string, oh, table_map);
case OFPTYPE_METER_STATS_REQUEST:
case OFPTYPE_METER_CONFIG_STATS_REQUEST:
@@ -3625,7 +3674,7 @@ ofp_to_string__(const struct ofp_header *oh,
case OFPTYPE_FLOW_STATS_REQUEST:
case OFPTYPE_AGGREGATE_STATS_REQUEST:
ofp_print_stats(string, oh);
- return ofp_print_flow_stats_request(string, oh, port_map);
+ return ofp_print_flow_stats_request(string, oh, port_map, table_map);
case OFPTYPE_TABLE_STATS_REQUEST:
ofp_print_stats(string, oh);
@@ -3645,7 +3694,7 @@ ofp_to_string__(const struct ofp_header *oh,
case OFPTYPE_FLOW_STATS_REPLY:
ofp_print_stats(string, oh);
- return ofp_print_flow_stats_reply(string, oh, port_map);
+ return ofp_print_flow_stats_reply(string, oh, port_map, table_map);
case OFPTYPE_QUEUE_STATS_REPLY:
ofp_print_stats(string, oh);
@@ -3657,7 +3706,7 @@ ofp_to_string__(const struct ofp_header *oh,
case OFPTYPE_TABLE_STATS_REPLY:
ofp_print_stats(string, oh);
- return ofp_print_table_stats_reply(string, oh);
+ return ofp_print_table_stats_reply(string, oh, table_map);
case OFPTYPE_AGGREGATE_STATS_REPLY:
ofp_print_stats(string, oh);
@@ -3699,16 +3748,19 @@ ofp_to_string__(const struct ofp_header *oh,
break;
case OFPTYPE_FLOW_MONITOR_STATS_REQUEST:
- return ofp_print_nxst_flow_monitor_request(string, msg, port_map);
+ return ofp_print_nxst_flow_monitor_request(string, msg, port_map,
+ table_map);
case OFPTYPE_FLOW_MONITOR_STATS_REPLY:
- return ofp_print_nxst_flow_monitor_reply(string, msg, port_map);
+ return ofp_print_nxst_flow_monitor_reply(string, msg, port_map,
+ table_map);
case OFPTYPE_BUNDLE_CONTROL:
return ofp_print_bundle_ctrl(string, msg);
case OFPTYPE_BUNDLE_ADD_MESSAGE:
- return ofp_print_bundle_add(string, msg, port_map, verbosity);
+ return ofp_print_bundle_add(string, msg, port_map, table_map,
+ verbosity);
case OFPTYPE_NXT_TLV_TABLE_MOD:
return ofp_print_tlv_table_mod(string, msg);
@@ -3720,7 +3772,8 @@ ofp_to_string__(const struct ofp_header *oh,
return ofp_print_tlv_table_reply(string, msg);
case OFPTYPE_NXT_RESUME:
- return ofp_print_packet_in(string, msg, port_map, verbosity);
+ return ofp_print_packet_in(string, msg, port_map, table_map,
+ verbosity);
case OFPTYPE_IPFIX_BRIDGE_STATS_REQUEST:
break;
case OFPTYPE_IPFIX_BRIDGE_STATS_REPLY:
@@ -3751,7 +3804,9 @@ add_newline(struct ds *s)
* for freeing the string. */
char *
ofp_to_string(const void *oh_, size_t len,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map,
+ int verbosity)
{
struct ds string = DS_EMPTY_INITIALIZER;
const struct ofp_header *oh = oh_;
@@ -3787,7 +3842,8 @@ ofp_to_string(const void *oh_, size_t len,
ofp_header_to_string__(oh, raw, &string);
size_t header_len = string.length;
- error = ofp_to_string__(oh, port_map, raw, &string, verbosity);
+ error = ofp_to_string__(oh, port_map, table_map,
+ raw, &string, verbosity);
if (error) {
if (string.length > header_len) {
ds_chomp(&string, ' ');
@@ -3827,9 +3883,11 @@ print_and_free(FILE *stream, char *string)
* numbers increase verbosity. */
void
ofp_print(FILE *stream, const void *oh, size_t len,
- const struct ofputil_port_map *port_map, int verbosity)
+ const struct ofputil_port_map *port_map,
+ const struct ofputil_table_map *table_map, int verbosity)
{
- print_and_free(stream, ofp_to_string(oh, len, port_map, verbosity));
+ print_and_free(stream, ofp_to_string(oh, len, port_map, table_map,
+ verbosity));
}
/* Dumps the contents of the Ethernet frame in the 'len' bytes starting at