X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fofp-print.c;h=f7872cb34d2c5984284b8a0a9ca1653db2e922f9;hb=c0bf00b922eeace65846cc1309a71adb69fe0eda;hp=f45ffa4dfe8b88a61edbbfe17687cb1261ae25c8;hpb=ed36537ebf48108accf21a8aa073279eceeafa98;p=sliver-openvswitch.git diff --git a/lib/ofp-print.c b/lib/ofp-print.c index f45ffa4df..f7872cb34 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -569,6 +569,22 @@ static void print_wild(struct ds *string, const char *leader, int is_wild, ds_put_char(string, ','); } +static void +print_wild_port(struct ds *string, const char *leader, int is_wild, + int verbosity, uint16_t port) +{ + if (is_wild && verbosity < 2) { + return; + } + ds_put_cstr(string, leader); + if (!is_wild) { + ofputil_format_port(port, string); + } else { + ds_put_char(string, '*'); + } + ds_put_char(string, ','); +} + static void print_ip_netmask(struct ds *string, const char *leader, ovs_be32 ip, uint32_t wild_bits, int verbosity) @@ -626,12 +642,16 @@ ofp10_match_to_string(const struct ofp10_match *om, int verbosity) ds_put_cstr(&f, "arp,"); } else if (om->dl_type == htons(ETH_TYPE_RARP)){ ds_put_cstr(&f, "rarp,"); + } else if (om->dl_type == htons(ETH_TYPE_MPLS)) { + ds_put_cstr(&f, "mpls,"); + } else if (om->dl_type == htons(ETH_TYPE_MPLS_MCAST)) { + ds_put_cstr(&f, "mplsm,"); } else { skip_type = false; } } - print_wild(&f, "in_port=", w & OFPFW10_IN_PORT, verbosity, - "%d", ntohs(om->in_port)); + print_wild_port(&f, "in_port=", w & OFPFW10_IN_PORT, verbosity, + ntohs(om->in_port)); print_wild(&f, "dl_vlan=", w & OFPFW10_DL_VLAN, verbosity, "%d", ntohs(om->dl_vlan)); print_wild(&f, "dl_vlan_pcp=", w & OFPFW10_DL_VLAN_PCP, verbosity, @@ -896,20 +916,22 @@ ofp_print_port_mod(struct ds *string, const struct ofp_header *oh) return; } - ds_put_format(string, "port: %"PRIu16": addr:"ETH_ADDR_FMT"\n", - pm.port_no, ETH_ADDR_ARGS(pm.hw_addr)); + ds_put_cstr(string, "port: "); + ofputil_format_port(pm.port_no, string); + ds_put_format(string, ": addr:"ETH_ADDR_FMT"\n", + ETH_ADDR_ARGS(pm.hw_addr)); - ds_put_format(string, " config: "); + ds_put_cstr(string, " config: "); ofp_print_port_config(string, pm.config); - ds_put_format(string, " mask: "); + ds_put_cstr(string, " mask: "); ofp_print_port_config(string, pm.mask); - ds_put_format(string, " advertise: "); + ds_put_cstr(string, " advertise: "); if (pm.advertise) { ofp_print_port_features(string, pm.advertise); } else { - ds_put_format(string, "UNCHANGED\n"); + ds_put_cstr(string, "UNCHANGED\n"); } } @@ -1135,7 +1157,8 @@ ofp_print_ofpst_port_request(struct ds *string, const struct ofp_header *oh) return; } - ds_put_format(string, " port_no=%2"PRIu16, ofp10_port); + ds_put_cstr(string, " port_no="); + ofputil_format_port(ofp10_port, string); } static void @@ -1162,7 +1185,11 @@ ofp_print_ofpst_port_reply(struct ds *string, const struct ofp_header *oh, return; } - ds_put_format(string, " port %2"PRIu16, ps.port_no); + ds_put_cstr(string, " port "); + if (ps.port_no < 10) { + ds_put_char(string, ' '); + } + ofputil_format_port(ps.port_no, string); ds_put_cstr(string, ": rx "); print_port_stat(string, "pkts=", ps.stats.rx_packets, 1); @@ -1511,20 +1538,38 @@ ofp_print_echo(struct ds *string, const struct ofp_header *oh, int verbosity) } static void -ofp_print_nxt_role_message(struct ds *string, - const struct nx_role_request *nrr) +ofp_print_role_message(struct ds *string, const struct ofp_header *oh) { - unsigned int role = ntohl(nrr->role); + struct ofputil_role_request rr; + enum ofperr error; + + error = ofputil_decode_role_message(oh, &rr); + if (error) { + ofp_print_error(string, error); + return; + } ds_put_cstr(string, " role="); - if (role == NX_ROLE_OTHER) { - ds_put_cstr(string, "other"); - } else if (role == NX_ROLE_MASTER) { + + switch (rr.role) { + case OFPCR12_ROLE_NOCHANGE: + ds_put_cstr(string, "nochange"); + break; + case OFPCR12_ROLE_EQUAL: + ds_put_cstr(string, "equal"); /* OF 1.2 wording */ + break; + case OFPCR12_ROLE_MASTER: ds_put_cstr(string, "master"); - } else if (role == NX_ROLE_SLAVE) { + break; + case OFPCR12_ROLE_SLAVE: ds_put_cstr(string, "slave"); - } else { - ds_put_format(string, "%u", role); + break; + default: + NOT_REACHED(); + } + + if (rr.have_generation_id) { + ds_put_format(string, " generation_id=%"PRIu64, rr.generation_id); } } @@ -1895,6 +1940,11 @@ ofp_to_string__(const struct ofp_header *oh, enum ofpraw raw, case OFPTYPE_BARRIER_REPLY: break; + case OFPTYPE_ROLE_REQUEST: + case OFPTYPE_ROLE_REPLY: + ofp_print_role_message(string, oh); + break; + case OFPTYPE_DESC_STATS_REQUEST: case OFPTYPE_PORT_DESC_STATS_REQUEST: ofp_print_stats_request(string, oh); @@ -1955,11 +2005,6 @@ ofp_to_string__(const struct ofp_header *oh, enum ofpraw raw, ofp_print_ofpst_port_desc_reply(string, oh); break; - case OFPTYPE_ROLE_REQUEST: - case OFPTYPE_ROLE_REPLY: - ofp_print_nxt_role_message(string, ofpmsg_body(oh)); - break; - case OFPTYPE_FLOW_MOD_TABLE_ID: ofp_print_nxt_flow_mod_table_id(string, ofpmsg_body(oh)); break;