/*
- * 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.
uint8_t ip_ttl;
uint8_t ip_proto;
ovs_be16 ip_csum;
- ovs_be32 ip_src;
- ovs_be32 ip_dst;
+ ovs_16aligned_be32 ip_src;
+ ovs_16aligned_be32 ip_dst;
};
BUILD_ASSERT_DECL(IP_HEADER_LEN == sizeof(struct ip_header));
ovs_be16 empty;
ovs_be16 mtu;
} frag;
- ovs_be32 gateway;
+ ovs_16aligned_be32 gateway;
} icmp_fields;
uint8_t icmp_data[0];
};
struct tcp_header {
ovs_be16 tcp_src;
ovs_be16 tcp_dst;
- ovs_be32 tcp_seq;
- ovs_be32 tcp_ack;
+ ovs_16aligned_be32 tcp_seq;
+ ovs_16aligned_be32 tcp_ack;
ovs_be16 tcp_ctl;
ovs_be16 tcp_winsz;
ovs_be16 tcp_csum;
/* Ethernet+IPv4 specific members. */
uint8_t ar_sha[ETH_ADDR_LEN]; /* Sender hardware address. */
- ovs_be32 ar_spa; /* Sender protocol address. */
+ ovs_16aligned_be32 ar_spa; /* Sender protocol address. */
uint8_t ar_tha[ETH_ADDR_LEN]; /* Target hardware address. */
- ovs_be32 ar_tpa; /* Target protocol address. */
-} __attribute__((packed));
+ ovs_16aligned_be32 ar_tpa; /* Target protocol address. */
+};
BUILD_ASSERT_DECL(ARP_ETH_HEADER_LEN == sizeof(struct arp_eth_header));
/* The IPv6 flow label is in the lower 20 bits of the first 32-bit word. */
unsigned int oui, uint16_t snap_type, size_t size);
void packet_set_ipv4(struct ofpbuf *, ovs_be32 src, ovs_be32 dst, uint8_t tos,
uint8_t ttl);
+void packet_set_ipv6(struct ofpbuf *, uint8_t proto, const ovs_be32 src[4],
+ const ovs_be32 dst[4], uint8_t tc,
+ ovs_be32 fl, uint8_t hlmit);
void packet_set_tcp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst);
void packet_set_udp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst);