FD.io VPP  v19.01.1-17-ge106252
Vector Packet Processing
mac_address.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __MAC_ADDRESS_H__
17 #define __MAC_ADDRESS_H__
18 
19 #include <vnet/ethernet/ethernet.h>
20 
21 typedef struct mac_address_t_
22 {
23  union
24  {
25  u8 bytes[6];
26  struct
27  {
30  } __clib_packed u;
31  };
33 
34 STATIC_ASSERT ((sizeof (mac_address_t) == 6),
35  "MAC address must represent the on wire format");
36 
37 extern const mac_address_t ZERO_MAC_ADDRESS;
38 
41 {
42  /* zero out the last 2 bytes, then copy over only 6 */
43  clib_memcpy (mac->bytes, bytes, 6);
44 }
45 
48 {
49  /* zero out the last 2 bytes, then copy over only 6 */
50  clib_memcpy (bytes, mac->bytes, 6);
51 }
52 
55 {
56  return (0 == mac->u.first_4 && 0 == mac->u.last_2);
57 }
58 
61 {
62  u64 *as_u64;
63 
64  as_u64 = (u64 *) mac->bytes;
65 
66  return (*as_u64);
67 }
68 
71 {
72  clib_memcpy (mac->bytes, &u, 6);
73 }
74 
77 {
78  mac_address_from_bytes (dst, src->bytes);
79 }
80 
82  va_list * args);
83 extern u8 *format_mac_address_t (u8 * s, va_list * args);
84 
85 #endif
86 
87 /*
88  * fd.io coding-style-patch-verification: ON
89  *
90  * Local Variables:
91  * eval: (c-set-style "gnu")
92  * End:
93  */
STATIC_ASSERT((sizeof(mac_address_t)==6),"MAC address must represent the on wire format")
vl_api_address_t src
Definition: vxlan_gbp.api:32
struct mac_address_t_::@121::@123 u
u64 as_u64
Definition: bihash_doc.h:63
unsigned long u64
Definition: types.h:89
static_always_inline void mac_address_copy(mac_address_t *dst, const mac_address_t *src)
Definition: mac_address.h:76
static_always_inline int mac_address_is_zero(const mac_address_t *mac)
Definition: mac_address.h:54
unsigned char u8
Definition: types.h:56
#define clib_memcpy(d, s, n)
Definition: string.h:180
const mac_address_t ZERO_MAC_ADDRESS
Definition: mac_address.c:19
#define static_always_inline
Definition: clib.h:99
static_always_inline void mac_address_to_bytes(const mac_address_t *mac, u8 *bytes)
Definition: mac_address.h:47
unsigned int u32
Definition: types.h:88
static_always_inline void mac_address_from_bytes(mac_address_t *mac, const u8 *bytes)
Definition: mac_address.h:40
struct _unformat_input_t unformat_input_t
unsigned short u16
Definition: types.h:57
vl_api_address_t dst
Definition: vxlan_gbp.api:33
static_always_inline void mac_address_from_u64(u64 u, mac_address_t *mac)
Definition: mac_address.h:70
struct mac_address_t_ mac_address_t
static_always_inline u64 mac_address_as_u64(const mac_address_t *mac)
Definition: mac_address.h:60
u64 uword
Definition: types.h:112
u8 * format_mac_address_t(u8 *s, va_list *args)
Definition: mac_address.c:27
uword unformat_mac_address_t(unformat_input_t *input, va_list *args)
Definition: mac_address.c:37
vl_api_mac_address_t mac
Definition: gbp.api:118