1e3cf00d0SUpinder Malhi /*
2e3cf00d0SUpinder Malhi  * Copyright (c) 2013, Cisco Systems, Inc. All rights reserved.
3e3cf00d0SUpinder Malhi  *
4e3cf00d0SUpinder Malhi  * This program is free software; you may redistribute it and/or modify
5e3cf00d0SUpinder Malhi  * it under the terms of the GNU General Public License as published by
6e3cf00d0SUpinder Malhi  * the Free Software Foundation; version 2 of the License.
7e3cf00d0SUpinder Malhi  *
8e3cf00d0SUpinder Malhi  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
9e3cf00d0SUpinder Malhi  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10e3cf00d0SUpinder Malhi  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
11e3cf00d0SUpinder Malhi  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
12e3cf00d0SUpinder Malhi  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
13e3cf00d0SUpinder Malhi  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14e3cf00d0SUpinder Malhi  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
15e3cf00d0SUpinder Malhi  * SOFTWARE.
16e3cf00d0SUpinder Malhi  *
17e3cf00d0SUpinder Malhi  */
18e3cf00d0SUpinder Malhi 
19e3cf00d0SUpinder Malhi #ifndef USNIC_CMN_UTIL_H
20e3cf00d0SUpinder Malhi #define USNIC_CMN_UTIL_H
21e3cf00d0SUpinder Malhi 
22e3cf00d0SUpinder Malhi static inline void
23e3cf00d0SUpinder Malhi usnic_mac_to_gid(const char *const mac, char *raw_gid)
24e3cf00d0SUpinder Malhi {
25e3cf00d0SUpinder Malhi 	raw_gid[0] = 0xfe;
26e3cf00d0SUpinder Malhi 	raw_gid[1] = 0x80;
27e3cf00d0SUpinder Malhi 	memset(&raw_gid[2], 0, 6);
28e3cf00d0SUpinder Malhi 	raw_gid[8] = mac[0]^2;
29e3cf00d0SUpinder Malhi 	raw_gid[9] = mac[1];
30e3cf00d0SUpinder Malhi 	raw_gid[10] = mac[2];
31e3cf00d0SUpinder Malhi 	raw_gid[11] = 0xff;
32e3cf00d0SUpinder Malhi 	raw_gid[12] = 0xfe;
33e3cf00d0SUpinder Malhi 	raw_gid[13] = mac[3];
34e3cf00d0SUpinder Malhi 	raw_gid[14] = mac[4];
35e3cf00d0SUpinder Malhi 	raw_gid[15] = mac[5];
36e3cf00d0SUpinder Malhi }
37e3cf00d0SUpinder Malhi 
38e3cf00d0SUpinder Malhi static inline void
394942c0b4SUpinder Malhi usnic_mac_ip_to_gid(const char *const mac, const __be32 inaddr, char *raw_gid)
40c7845bcaSUpinder Malhi {
41c7845bcaSUpinder Malhi 	raw_gid[0] = 0xfe;
42c7845bcaSUpinder Malhi 	raw_gid[1] = 0x80;
43c7845bcaSUpinder Malhi 	memset(&raw_gid[2], 0, 2);
44c7845bcaSUpinder Malhi 	memcpy(&raw_gid[4], &inaddr, 4);
45c7845bcaSUpinder Malhi 	raw_gid[8] = mac[0]^2;
46c7845bcaSUpinder Malhi 	raw_gid[9] = mac[1];
47c7845bcaSUpinder Malhi 	raw_gid[10] = mac[2];
48c7845bcaSUpinder Malhi 	raw_gid[11] = 0xff;
49c7845bcaSUpinder Malhi 	raw_gid[12] = 0xfe;
50c7845bcaSUpinder Malhi 	raw_gid[13] = mac[3];
51c7845bcaSUpinder Malhi 	raw_gid[14] = mac[4];
52c7845bcaSUpinder Malhi 	raw_gid[15] = mac[5];
53c7845bcaSUpinder Malhi }
54c7845bcaSUpinder Malhi 
55c7845bcaSUpinder Malhi static inline void
56e3cf00d0SUpinder Malhi usnic_write_gid_if_id_from_mac(char *mac, char *raw_gid)
57e3cf00d0SUpinder Malhi {
58e3cf00d0SUpinder Malhi 	raw_gid[8] = mac[0]^2;
59e3cf00d0SUpinder Malhi 	raw_gid[9] = mac[1];
60e3cf00d0SUpinder Malhi 	raw_gid[10] = mac[2];
61e3cf00d0SUpinder Malhi 	raw_gid[11] = 0xff;
62e3cf00d0SUpinder Malhi 	raw_gid[12] = 0xfe;
63e3cf00d0SUpinder Malhi 	raw_gid[13] = mac[3];
64e3cf00d0SUpinder Malhi 	raw_gid[14] = mac[4];
65e3cf00d0SUpinder Malhi 	raw_gid[15] = mac[5];
66e3cf00d0SUpinder Malhi }
67e3cf00d0SUpinder Malhi 
68e3cf00d0SUpinder Malhi #endif /* USNIC_COMMON_UTIL_H */
69