X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fpackets.h;h=2c33078f2bbf3f479041cc6b3a44347f6ab77f1a;hb=67a4917b07031b387beafaedce413b4207214059;hp=f81489eee4902158865b82ce7210d80dc7df8b15;hpb=34e63086edddcae06d7c1a4fa84fec0861e50758;p=sliver-openvswitch.git diff --git a/lib/packets.h b/lib/packets.h index f81489eee..2c33078f2 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009 Nicira Networks. + * Copyright (c) 2008, 2009, 2010 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,18 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #ifndef PACKETS_H #define PACKETS_H 1 +#include #include #include #include "compiler.h" #include "random.h" #include "util.h" +struct ofpbuf; + #define ETH_ADDR_LEN 6 -static const uint8_t eth_addr_broadcast[ETH_ADDR_LEN] UNUSED +static const uint8_t eth_addr_broadcast[ETH_ADDR_LEN] OVS_UNUSED = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; static inline bool eth_addr_is_broadcast(const uint8_t ea[6]) @@ -97,11 +101,38 @@ static inline bool eth_addr_is_reserved(const uint8_t ea[ETH_ADDR_LEN]) && (ea[5] & 0xf0) == 0x00); } +void compose_benign_packet(struct ofpbuf *, const char *tag, + uint16_t snap_type, + const uint8_t eth_src[ETH_ADDR_LEN]); + +/* Example: + * + * uint8_t mac[ETH_ADDR_LEN]; + * [...] + * printf("The Ethernet address is "ETH_ADDR_FMT"\n", ETH_ADDR_ARGS(mac)); + * + */ #define ETH_ADDR_FMT \ "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8 #define ETH_ADDR_ARGS(ea) \ (ea)[0], (ea)[1], (ea)[2], (ea)[3], (ea)[4], (ea)[5] +/* Example: + * + * char *string = "1 00:11:22:33:44:55 2"; + * uint8_t mac[ETH_ADDR_LEN]; + * int a, b; + * + * if (sscanf(string, "%d"ETH_ADDR_SCAN_FMT"%d", + * &a, ETH_ADDR_SCAN_ARGS(mac), &b) == 1 + ETH_ADDR_SCAN_COUNT + 1) { + * ... + * } + */ +#define ETH_ADDR_SCAN_FMT "%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8":%"SCNx8 +#define ETH_ADDR_SCAN_ARGS(ea) \ + &(ea)[0], &(ea)[1], &(ea)[2], &(ea)[3], &(ea)[4], &(ea)[5] +#define ETH_ADDR_SCAN_COUNT 6 + #define ETH_TYPE_IP 0x0800 #define ETH_TYPE_ARP 0x0806 #define ETH_TYPE_VLAN 0x8100