1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Copyright (c) 2022 Huawei Device Co., Ltd. 4 * 5 * Description: Definitions for the structure 6 * associated with NewIP address. 7 * 8 * Author: Yang Yanjun <yangyanjun@huawei.com> 9 * 10 * Data: 2022-09-06 11 */ 12 #ifndef _NIP_H 13 #define _NIP_H 14 15 #define NIP_ADDR_LEN_1 1 16 #define NIP_ADDR_LEN_2 2 17 #define NIP_ADDR_LEN_3 3 18 #define NIP_ADDR_LEN_4 4 19 #define NIP_ADDR_LEN_5 5 20 #define NIP_ADDR_LEN_7 7 21 #define NIP_ADDR_LEN_8 8 22 23 #define NIP_ADDR_BIT_LEN_8 8 24 #define NIP_ADDR_BIT_LEN_16 16 25 #define NIP_ADDR_BIT_LEN_24 24 26 #define NIP_ADDR_BIT_LEN_40 40 27 #define NIP_ADDR_BIT_LEN_MAX 64 28 29 enum nip_addr_check_value { 30 ADDR_FIRST_DC = 0xDC, 31 ADDR_FIRST_F0 = 0xF0, 32 ADDR_FIRST_F1, 33 ADDR_FIRST_F2, 34 ADDR_FIRST_F3, 35 ADDR_FIRST_FE = 0xFE, 36 ADDR_FIRST_FF = 0xFF, 37 ADDR_SECOND_MIN_DD = 0xDD, 38 ADDR_SECOND_MIN_F1 = 0x14, /* f1 14 00 */ 39 ADDR_THIRD_MIN_F2 = 0x01, /* f2 00 01 00 00 */ 40 ADDR_THIRD_MIN_F3 = 0x01, /* F3 0001 0000 0000 */ 41 }; 42 43 enum nip_8bit_addr_index { 44 NIP_8BIT_ADDR_INDEX_0 = 0, 45 NIP_8BIT_ADDR_INDEX_1 = 1, 46 NIP_8BIT_ADDR_INDEX_2 = 2, 47 NIP_8BIT_ADDR_INDEX_3 = 3, 48 NIP_8BIT_ADDR_INDEX_4 = 4, 49 NIP_8BIT_ADDR_INDEX_5 = 5, 50 NIP_8BIT_ADDR_INDEX_6 = 6, 51 NIP_8BIT_ADDR_INDEX_7 = 7, 52 NIP_8BIT_ADDR_INDEX_MAX, 53 }; 54 55 enum nip_16bit_addr_index { 56 NIP_16BIT_ADDR_INDEX_0 = 0, 57 NIP_16BIT_ADDR_INDEX_1 = 1, 58 NIP_16BIT_ADDR_INDEX_2 = 2, 59 NIP_16BIT_ADDR_INDEX_3 = 3, 60 NIP_16BIT_ADDR_INDEX_MAX, 61 }; 62 63 enum nip_32bit_addr_index { 64 NIP_32BIT_ADDR_INDEX_0 = 0, 65 NIP_32BIT_ADDR_INDEX_1 = 1, 66 NIP_32BIT_ADDR_INDEX_MAX, 67 }; 68 69 #define NIP_ADDR_FIELD8 v.u.field8 70 #define NIP_ADDR_FIELD16 v.u.field16 71 #define NIP_ADDR_FIELD32 v.u.field32 72 73 #pragma pack(1) 74 struct nip_addr_field { 75 union { 76 unsigned char field8[NIP_8BIT_ADDR_INDEX_MAX]; 77 unsigned short field16[NIP_16BIT_ADDR_INDEX_MAX]; /* big-endian */ 78 unsigned int field32[NIP_32BIT_ADDR_INDEX_MAX]; /* big-endian */ 79 } u; 80 }; 81 82 struct nip_addr { 83 unsigned char bitlen; /* The address length is in bit (not byte) */ 84 struct nip_addr_field v; 85 }; 86 #pragma pack() 87 88 enum nip_index { 89 INDEX_0 = 0, 90 INDEX_1 = 1, 91 INDEX_2 = 2, 92 INDEX_3 = 3, 93 INDEX_4 = 4, 94 INDEX_5 = 5, 95 INDEX_6 = 6, 96 INDEX_7 = 7, 97 INDEX_8 = 8, 98 INDEX_9 = 9, 99 INDEX_10 = 10, 100 INDEX_11 = 11, 101 INDEX_12 = 12, 102 INDEX_13 = 13, 103 INDEX_14 = 14, 104 INDEX_15 = 15, 105 INDEX_MAX, 106 }; 107 108 #endif /* _NIP_H */ 109