blob: 098b3ce19c19f6ceee4327818864b7c2158073cb [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
18const mac_address_t ZERO_MAC_ADDRESS = {
19 .bytes = {
Neale Ranns86327be2018-11-02 09:14:01 -070020 0, 0, 0, 0, 0, 0,
21 },
Neale Rannsde5b08f2018-08-29 06:37:18 -070022};
23
24u8 *
25format_mac_address_t (u8 * s, va_list * args)
26{
27 const mac_address_t *mac = va_arg (*args, mac_address_t *);
28
Neale Ranns86327be2018-11-02 09:14:01 -070029 return format (s, "%02x:%02x:%02x:%02x:%02x:%02x",
30 mac->bytes[0], mac->bytes[1], mac->bytes[2],
31 mac->bytes[3], mac->bytes[4], mac->bytes[5]);
Neale Rannsde5b08f2018-08-29 06:37:18 -070032}
33
Neale Ranns86327be2018-11-02 09:14:01 -070034uword
35unformat_mac_address_t (unformat_input_t * input, va_list * args)
36{
37 mac_address_t *mac = va_arg (*args, mac_address_t *);
Neale Ranns37029302018-08-10 05:30:06 -070038 u32 i, a[3];
Neale Ranns86327be2018-11-02 09:14:01 -070039
BenoƮt Ganne3d0ef262019-02-07 13:21:42 +010040 if (unformat (input, "%_%X:%X:%X:%X:%X:%X%_",
41 1, &mac->bytes[0], 1, &mac->bytes[1], 1, &mac->bytes[2],
42 1, &mac->bytes[3], 1, &mac->bytes[4], 1, &mac->bytes[5]))
Neale Ranns37029302018-08-10 05:30:06 -070043 return (1);
44 else if (unformat (input, "%_%x.%x.%x%_", &a[0], &a[1], &a[2]))
45 {
46 for (i = 0; i < ARRAY_LEN (a); i++)
47 if (a[i] >= (1 << 16))
48 return 0;
Neale Ranns86327be2018-11-02 09:14:01 -070049
Neale Ranns37029302018-08-10 05:30:06 -070050 mac->bytes[0] = (a[0] >> 8) & 0xff;
51 mac->bytes[1] = (a[0] >> 0) & 0xff;
52 mac->bytes[2] = (a[1] >> 8) & 0xff;
53 mac->bytes[3] = (a[1] >> 0) & 0xff;
54 mac->bytes[4] = (a[2] >> 8) & 0xff;
55 mac->bytes[5] = (a[2] >> 0) & 0xff;
56
57 return (1);
58 }
59 return (0);
Neale Ranns86327be2018-11-02 09:14:01 -070060}
Neale Rannsde5b08f2018-08-29 06:37:18 -070061
Neale Rannscbe25aa2019-09-30 10:53:31 +000062void
63mac_address_increment (mac_address_t * mac)
64{
65 u64 a;
66
Jieqiang Wang186b2152022-08-14 17:49:44 +080067 a = ethernet_mac_address_u64 (mac->bytes);
Neale Rannscbe25aa2019-09-30 10:53:31 +000068 a++;
Jieqiang Wang186b2152022-08-14 17:49:44 +080069 ethernet_mac_address_from_u64 (a, mac->bytes);
Neale Rannscbe25aa2019-09-30 10:53:31 +000070}
71
Neale Rannsde5b08f2018-08-29 06:37:18 -070072/*
73 * fd.io coding-style-patch-verification: ON
74 *
75 * Local Variables:
76 * eval: (c-set-style "gnu")
77 * End:
78 */