June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
01: #ifndef __LINUX_BRIDGE_EBT_AMONG_H 02: #define __LINUX_BRIDGE_EBT_AMONG_H 03: 04: #include <linux/types.h> 05: 06: #define EBT_AMONG_DST 0x01 07: #define EBT_AMONG_SRC 0x02 08: 09: /* Grzegorz Borowiak <grzes@gnu.univ.gda.pl> 2003 10: * 11: * Write-once-read-many hash table, used for checking if a given 12: * MAC address belongs to a set or not and possibly for checking 13: * if it is related with a given IPv4 address. 14: * 15: * The hash value of an address is its last byte. 16: * 17: * In real-world ethernet addresses, values of the last byte are 18: * evenly distributed and there is no need to consider other bytes. 19: * It would only slow the routines down. 20: * 21: * For MAC address comparison speedup reasons, we introduce a trick. 22: * MAC address is mapped onto an array of two 32-bit integers. 23: * This pair of integers is compared with MAC addresses in the 24: * hash table, which are stored also in form of pairs of integers 25: * (in `cmp' array). This is quick as it requires only two elementary 26: * number comparisons in worst case. Further, we take advantage of 27: * fact that entropy of 3 last bytes of address is larger than entropy 28: * of 3 first bytes. So first we compare 4 last bytes of addresses and 29: * if they are the same we compare 2 first. 30: * 31: * Yes, it is a memory overhead, but in 2003 AD, who cares? 32: */ 33: 34: struct ebt_mac_wormhash_tuple { 35: __u32 cmp[2]; 36: __be32 ip; 37: }; 38: 39: struct ebt_mac_wormhash { 40: int table[257]; 41: int poolsize; 42: struct ebt_mac_wormhash_tuple pool[0]; 43: }; 44: 45: #define ebt_mac_wormhash_size(x) ((x) ? sizeof(struct ebt_mac_wormhash) \ 46: + (x)->poolsize * sizeof(struct ebt_mac_wormhash_tuple) : 0) 47: 48: struct ebt_among_info { 49: int wh_dst_ofs; 50: int wh_src_ofs; 51: int bitmask; 52: }; 53: 54: #define EBT_AMONG_DST_NEG 0x1 55: #define EBT_AMONG_SRC_NEG 0x2 56: 57: #define ebt_among_wh_dst(x) ((x)->wh_dst_ofs ? \ 58: (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_dst_ofs) : NULL) 59: #define ebt_among_wh_src(x) ((x)->wh_src_ofs ? \ 60: (struct ebt_mac_wormhash*)((char*)(x) + (x)->wh_src_ofs) : NULL) 61: 62: #define EBT_AMONG_MATCH "among" 63: 64: #endif 65: