blob: b7981299700ffbaaca87cd057648817ed9b819c0 [file] [log] [blame]
Neale Rannsde5b08f2018-08-29 06:37:18 -07001/*
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#include <vnet/ethernet/mac_address.h>
17
Neale Ranns86327be2018-11-02 09:14:01 -070018/* *INDENT-OFF* */
Neale Rannsde5b08f2018-08-29 06:37:18 -070019const mac_address_t ZERO_MAC_ADDRESS = {
20 .bytes = {
Neale Ranns86327be2018-11-02 09:14:01 -070021 0, 0, 0, 0, 0, 0,
22 },
Neale Rannsde5b08f2018-08-29 06:37:18 -070023};
Neale Ranns86327be2018-11-02 09:14:01 -070024/* *INDENT-ON* */
Neale Rannsde5b08f2018-08-29 06:37:18 -070025
26u8 *
27format_mac_address_t (u8 * s, va_list * args)
28{
29 const mac_address_t *mac = va_arg (*args, mac_address_t *);
30
Neale Ranns86327be2018-11-02 09:14:01 -070031 return format (s, "%02x:%02x:%02x:%02x:%02x:%02x",
32 mac->bytes[0], mac->bytes[1], mac->bytes[2],
33 mac->bytes[3], mac->bytes[4], mac->bytes[5]);
Neale Rannsde5b08f2018-08-29 06:37:18 -070034}
35
Neale Ranns86327be2018-11-02 09:14:01 -070036uword
37unformat_mac_address_t (unformat_input_t * input, va_list * args)
38{
39 mac_address_t *mac = va_arg (*args, mac_address_t *);
Neale Ranns37029302018-08-10 05:30:06 -070040 u32 i, a[3];
Neale Ranns86327be2018-11-02 09:14:01 -070041
BenoƮt Ganne3d0ef262019-02-07 13:21:42 +010042 if (unformat (input, "%_%X:%X:%X:%X:%X:%X%_",
43 1, &mac->bytes[0], 1, &mac->bytes[1], 1, &mac->bytes[2],
44 1, &mac->bytes[3], 1, &mac->bytes[4], 1, &mac->bytes[5]))
Neale Ranns37029302018-08-10 05:30:06 -070045 return (1);
46 else if (unformat (input, "%_%x.%x.%x%_", &a[0], &a[1], &a[2]))
47 {
48 for (i = 0; i < ARRAY_LEN (a); i++)
49 if (a[i] >= (1 << 16))
50 return 0;
Neale Ranns86327be2018-11-02 09:14:01 -070051
Neale Ranns37029302018-08-10 05:30:06 -070052 mac->bytes[0] = (a[0] >> 8) & 0xff;
53 mac->bytes[1] = (a[0] >> 0) & 0xff;
54 mac->bytes[2] = (a[1] >> 8) & 0xff;
55 mac->bytes[3] = (a[1] >> 0) & 0xff;
56 mac->bytes[4] = (a[2] >> 8) & 0xff;
57 mac->bytes[5] = (a[2] >> 0) & 0xff;
58
59 return (1);
60 }
61 return (0);
Neale Ranns86327be2018-11-02 09:14:01 -070062}
Neale Rannsde5b08f2018-08-29 06:37:18 -070063
Neale Rannscbe25aa2019-09-30 10:53:31 +000064void
65mac_address_increment (mac_address_t * mac)
66{
67 u64 a;
68
69 a = mac_address_as_u64 (mac);
70 a++;
71 mac_address_from_u64 (mac, a);
72}
73
Neale Rannsde5b08f2018-08-29 06:37:18 -070074/*
75 * fd.io coding-style-patch-verification: ON
76 *
77 * Local Variables:
78 * eval: (c-set-style "gnu")
79 * End:
80 */