#include "interface.h"
#include "extract.h"
#include "addrtoname.h"
+#include "ether.h"
#include "ethertype.h"
#include "ipproto.h"
#include "openflow.h"
+static const char tstr[] = " [|openflow]";
+static const char cstr[] = " (corrupt)";
+
#define OFPT_HELLO 0x00
#define OFPT_ERROR 0x01
#define OFPT_ECHO_REQUEST 0x02
#define OFP_MAX_PORT_NAME_LEN 16
#define DESC_STR_LEN 256
#define SERIAL_NUM_LEN 32
-#define OFP_ETH_ALEN 6
#define OFP_VLAN_NONE 0xffff
static const char *
return cp + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_data_print(cp, ep, len - 4);
corrupt: /* skip the undersized data */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp, len);
return cp + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
printf("\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)));
cp += 2;
/* hw_addr */
- TCHECK2(*cp, OFP_ETH_ALEN);
+ TCHECK2(*cp, ETHER_ADDR_LEN);
printf(", hw_addr %s", etheraddr_string(cp));
- cp += OFP_ETH_ALEN;
+ cp += ETHER_ADDR_LEN;
/* name */
TCHECK2(*cp, OFP_MAX_PORT_NAME_LEN);
printf(", name '");
return cp;
corrupt: /* skip the undersized trailing data */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the rest of queue properties */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the rest of queues */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
printf("%smatch in_port %s", pfx, tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)));
cp += 2;
/* dl_src */
- TCHECK2(*cp, OFP_ETH_ALEN);
+ TCHECK2(*cp, ETHER_ADDR_LEN);
if (! (wildcards & OFPFW_DL_SRC))
printf("%smatch dl_src %s", pfx, etheraddr_string(cp));
- cp += OFP_ETH_ALEN;
+ cp += ETHER_ADDR_LEN;
/* dl_dst */
- TCHECK2(*cp, OFP_ETH_ALEN);
+ TCHECK2(*cp, ETHER_ADDR_LEN);
if (! (wildcards & OFPFW_DL_DST))
printf("%smatch dl_dst %s", pfx, etheraddr_string(cp));
- cp += OFP_ETH_ALEN;
+ cp += ETHER_ADDR_LEN;
/* dl_vlan */
TCHECK2(*cp, 2);
if (! (wildcards & OFPFW_DL_VLAN))
return cp + 2;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
case OFPAT_SET_DL_SRC:
case OFPAT_SET_DL_DST:
/* dl_addr */
- TCHECK2(*cp, OFP_ETH_ALEN);
+ TCHECK2(*cp, ETHER_ADDR_LEN);
printf(", dl_addr %s", etheraddr_string(cp));
- cp += OFP_ETH_ALEN;
+ cp += ETHER_ADDR_LEN;
/* pad */
TCHECK2(*cp, 6);
cp += 6;
return cp;
corrupt: /* skip the rest of actions */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_phy_ports_print(cp, ep, len - OF_SWITCH_FEATURES_LEN);
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_actions_print("\n\t ", cp, ep, len - OF_FLOW_MOD_LEN);
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
printf("\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)));
cp += 2;
/* hw_addr */
- TCHECK2(*cp, OFP_ETH_ALEN);
+ TCHECK2(*cp, ETHER_ADDR_LEN);
printf(", hw_addr %s", etheraddr_string(cp));
- cp += OFP_ETH_ALEN;
+ cp += ETHER_ADDR_LEN;
/* config */
TCHECK2(*cp, 4);
printf("\n\t config 0x%08x", EXTRACT_32BITS(cp));
return cp + 4;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the message body */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp + DESC_STR_LEN;
corrupt: /* skip the message body */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp, len);
return cp + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the rest of flow statistics entries */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp + 4;
corrupt: /* skip the message body */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp, len);
return cp + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the undersized trailing data */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the undersized trailing data */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp;
corrupt: /* skip the undersized trailing data */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp0 + len;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_packet_data_print(cp, ep, len - OF_PACKET_OUT_LEN - actions_len);
corrupt: /* skip the rest of the message body */
- printf(" (corrupt)");
+ printf("%s", cstr);
TCHECK2(*cp0, len0);
return cp0 + len0;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_packet_data_print(cp, ep, len - (OF_PACKET_IN_LEN - 2));
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return cp + 8;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
return of10_data_print(cp, ep, len - OF_ERROR_MSG_LEN);
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}
goto next_message;
corrupt: /* skip the message body */
- printf(" (corrupt)");
+ printf("%s", cstr);
next_message:
TCHECK2(*cp0, len0 - OF_HEADER_LEN);
return cp0 + len0 - OF_HEADER_LEN;
trunc:
- printf(" [|openflow]");
+ printf("%s", tstr);
return ep;
}