X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fpackets.h;h=251fc1cb3c13ade13129f6ef36bcc895664032bd;hb=00c08589876b7c1cd8f57e5ebb3e66bb164c5a3d;hp=0bc368b939f617d73844c5920618214984df938c;hpb=c25c91fd5ed075a6e9f37ab38c3ea2302e9e8442;p=sliver-openvswitch.git diff --git a/lib/packets.h b/lib/packets.h index 0bc368b93..251fc1cb3 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -131,6 +131,8 @@ void compose_benign_packet(struct ofpbuf *, const char *tag, uint16_t snap_type, const uint8_t eth_src[ETH_ADDR_LEN]); +void eth_set_vlan_tci(struct ofpbuf *, ovs_be16 tci); + /* Example: * * uint8_t mac[ETH_ADDR_LEN]; @@ -163,7 +165,6 @@ void compose_benign_packet(struct ofpbuf *, const char *tag, #define ETH_TYPE_ARP 0x0806 #define ETH_TYPE_VLAN 0x8100 #define ETH_TYPE_IPV6 0x86dd -#define ETH_TYPE_CFM 0x8902 #define ETH_TYPE_LACP 0x8809 /* Minimum value for an Ethernet type. Values below this are IEEE 802.2 frame @@ -252,23 +253,6 @@ struct vlan_eth_header { } __attribute__((packed)); BUILD_ASSERT_DECL(VLAN_ETH_HEADER_LEN == sizeof(struct vlan_eth_header)); -/* A 'ccm' represents a Continuity Check Message from the 802.1ag specification. - * Continuity Check Messages are broadcast periodically so that hosts can - * determine who they have connectivity to. */ -#define CCM_LEN 74 -#define CCM_MAID_LEN 48 -struct ccm { - uint8_t mdlevel_version; /* MD Level and Version */ - uint8_t opcode; - uint8_t flags; - uint8_t tlv_offset; - ovs_be32 seq; - ovs_be16 mpid; - uint8_t maid[CCM_MAID_LEN]; - uint8_t zero[16]; /* Defined by ITU-T Y.1731 should be zero */ -} __attribute__((packed)); -BUILD_ASSERT_DECL(CCM_LEN == sizeof(struct ccm)); - /* The "(void) (ip)[0]" below has no effect on the value, since it's the first * argument of a comma expression, but it makes sure that 'ip' is a pointer. * This is useful since a common mistake is to pass an integer instead of a @@ -412,6 +396,13 @@ struct in6_addr ipv6_create_mask(int mask); int ipv6_count_cidr_bits(const struct in6_addr *netmask); bool ipv6_is_cidr(const struct in6_addr *netmask); +void *eth_compose(struct ofpbuf *, const uint8_t eth_dst[ETH_ADDR_LEN], + const uint8_t eth_src[ETH_ADDR_LEN], uint16_t eth_type, + size_t size); +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); + /* Masks for lacp_info state member. */ #define LACP_STATE_ACT 0x01 /* Activity. Active or passive? */ #define LACP_STATE_TIME 0x02 /* Timeout. Short or long timeout? */ @@ -429,12 +420,12 @@ bool ipv6_is_cidr(const struct in6_addr *netmask); #define LACP_INFO_LEN 15 struct lacp_info { - ovs_be16 sys_priority; /* System priority. */ - uint8_t sysid[ETH_ADDR_LEN]; /* System ID. */ - ovs_be16 key; /* Operational key. */ - ovs_be16 port_priority; /* Port priority. */ - ovs_be16 portid; /* Port ID. */ - uint8_t state; /* State mask. See LACP_STATE macros. */ + ovs_be16 sys_priority; /* System priority. */ + uint8_t sys_id[ETH_ADDR_LEN]; /* System ID. */ + ovs_be16 key; /* Operational key. */ + ovs_be16 port_priority; /* Port priority. */ + ovs_be16 port_id; /* Port ID. */ + uint8_t state; /* State mask. See LACP_STATE macros. */ } __attribute__((packed)); BUILD_ASSERT_DECL(LACP_INFO_LEN == sizeof(struct lacp_info)); @@ -460,9 +451,8 @@ struct lacp_pdu { } __attribute__((packed)); BUILD_ASSERT_DECL(LACP_PDU_LEN == sizeof(struct lacp_pdu)); -void compose_lacp_packet(struct ofpbuf *, struct lacp_info *actor, - struct lacp_info *partner, - const uint8_t eth_src[ETH_ADDR_LEN]); +void compose_lacp_pdu(const struct lacp_info *actor, + const struct lacp_info *partner, struct lacp_pdu *); const struct lacp_pdu *parse_lacp_packet(const struct ofpbuf *);