X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fpackets.h;h=78ccfe90dc1c8e18038f365dc2156e3e84f0e0ce;hb=ca261b65354f522ba43c823221763ca6f4604e2d;hp=439a7dd07ffae4a93d832acaf37f42b0c4c5c976;hpb=f4ebc25ea05ce635afeafdc089e6573c279c8cdf;p=openvswitch diff --git a/lib/packets.h b/lib/packets.h index 439a7dd0..78ccfe90 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -134,6 +134,8 @@ void compose_benign_packet(struct ofpbuf *, const char *tag, void eth_push_vlan(struct ofpbuf *, ovs_be16 tci); void eth_pop_vlan(struct ofpbuf *); +const char *eth_from_hex(const char *hex, struct ofpbuf **packetp); + /* Example: * * uint8_t mac[ETH_ADDR_LEN]; @@ -331,11 +333,23 @@ struct ip_header { }; BUILD_ASSERT_DECL(IP_HEADER_LEN == sizeof(struct ip_header)); -#define ICMP_HEADER_LEN 4 +#define ICMP_HEADER_LEN 8 struct icmp_header { uint8_t icmp_type; uint8_t icmp_code; ovs_be16 icmp_csum; + union { + struct { + ovs_be16 id; + ovs_be16 seq; + } echo; + struct { + ovs_be16 empty; + ovs_be16 mtu; + } frag; + ovs_be32 gateway; + } icmp_fields; + uint8_t icmp_data[0]; }; BUILD_ASSERT_DECL(ICMP_HEADER_LEN == sizeof(struct icmp_header)); @@ -355,6 +369,7 @@ BUILD_ASSERT_DECL(UDP_HEADER_LEN == sizeof(struct udp_header)); #define TCP_ACK 0x10 #define TCP_URG 0x20 +#define TCP_CTL(flags, offset) (htons((flags) | ((offset) << 12))) #define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x003f) #define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12) @@ -448,5 +463,9 @@ void *eth_compose(struct ofpbuf *, const uint8_t eth_dst[ETH_ADDR_LEN], void *snap_compose(struct ofpbuf *, const uint8_t eth_dst[ETH_ADDR_LEN], const uint8_t eth_src[ETH_ADDR_LEN], 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_tcp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst); +void packet_set_udp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst); #endif /* packets.h */