#include "netdev.h"
#include "nx-match.h"
#include "ofp-actions.h"
+#include "ofpbuf.h"
#include "ofp-errors.h"
#include "ofp-msgs.h"
#include "ofp-util.h"
-#include "ofpbuf.h"
#include "openflow/openflow.h"
#include "openflow/nicira-ext.h"
#include "packets.h"
+#include "dp-packet.h"
#include "type-props.h"
#include "unaligned.h"
#include "odp-util.h"
ofp_packet_to_string(const void *data, size_t len)
{
struct ds ds = DS_EMPTY_INITIALIZER;
- const struct pkt_metadata md = PKT_METADATA_INITIALIZER(0);
- struct ofpbuf buf;
+ struct dp_packet buf;
struct flow flow;
size_t l4_size;
- ofpbuf_use_const(&buf, data, len);
- flow_extract(&buf, &md, &flow);
+ dp_packet_use_const(&buf, data, len);
+ flow_extract(&buf, &flow);
flow_format(&ds, &flow);
- l4_size = ofpbuf_l4_size(&buf);
+ l4_size = dp_packet_l4_size(&buf);
if (flow.nw_proto == IPPROTO_TCP && l4_size >= TCP_HEADER_LEN) {
- struct tcp_header *th = ofpbuf_l4(&buf);
+ struct tcp_header *th = dp_packet_l4(&buf);
ds_put_format(&ds, " tcp_csum:%"PRIx16, ntohs(th->tcp_csum));
} else if (flow.nw_proto == IPPROTO_UDP && l4_size >= UDP_HEADER_LEN) {
- struct udp_header *uh = ofpbuf_l4(&buf);
+ struct udp_header *uh = dp_packet_l4(&buf);
ds_put_format(&ds, " udp_csum:%"PRIx16, ntohs(uh->udp_csum));
} else if (flow.nw_proto == IPPROTO_SCTP && l4_size >= SCTP_HEADER_LEN) {
- struct sctp_header *sh = ofpbuf_l4(&buf);
+ struct sctp_header *sh = dp_packet_l4(&buf);
ds_put_format(&ds, " sctp_csum:%"PRIx32,
ntohl(get_16aligned_be32(&sh->sctp_csum)));
+ } else if (flow.nw_proto == IPPROTO_ICMP && l4_size >= ICMP_HEADER_LEN) {
+ struct icmp_header *icmph = dp_packet_l4(&buf);
+ ds_put_format(&ds, " icmp_csum:%"PRIx16,
+ ntohs(icmph->icmp_csum));
+ } else if (flow.nw_proto == IPPROTO_ICMPV6 && l4_size >= ICMP6_HEADER_LEN) {
+ struct icmp6_header *icmp6h = dp_packet_l4(&buf);
+ ds_put_format(&ds, " icmp6_csum:%"PRIx16,
+ ntohs(icmp6h->icmp6_cksum));
}
ds_put_char(&ds, '\n');
ds_put_format(string, " tun_dst="IP_FMT, IP_ARGS(pin.fmd.tun_dst));
}
+ if (pin.fmd.gbp_id != htons(0)) {
+ ds_put_format(string, " gbp_id=%"PRIu16,
+ ntohs(pin.fmd.gbp_id));
+ }
+
+ if (pin.fmd.gbp_flags) {
+ ds_put_format(string, " gbp_flags=0x%02"PRIx8, pin.fmd.gbp_flags);
+ }
+
if (pin.fmd.metadata != htonll(0)) {
ds_put_format(string, " metadata=0x%"PRIx64, ntohll(pin.fmd.metadata));
}
ds_put_format(string, " %s\n", ofperr_get_name(error));
if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
- ds_put_printable(string, ofpbuf_data(&payload), ofpbuf_size(&payload));
+ ds_put_printable(string, payload.data, payload.size);
} else {
- s = ofp_to_string(ofpbuf_data(&payload), ofpbuf_size(&payload), 1);
+ s = ofp_to_string(payload.data, payload.size, 1);
ds_put_cstr(string, s);
free(s);
}
static void
ofp_print_group(struct ds *s, uint32_t group_id, uint8_t type,
- struct list *p_buckets, enum ofp_version ofp_version,
+ struct ovs_list *p_buckets, enum ofp_version ofp_version,
bool suppress_type)
{
struct ofputil_bucket *bucket;