- /* macros to the relevant system address description structs */
-#ifdef IPV6
- /** insp_sockaddr for ipv6
- */
- typedef struct sockaddr_in6 insp_sockaddr;
- /** insp_inaddr for ipv6
- */
- typedef struct in6_addr insp_inaddr;
-#define AF_FAMILY AF_INET6
-#define PF_PROTOCOL PF_INET6
-
-#else
- /** insp_sockaddr for ipv4
- */
- typedef struct sockaddr_in insp_sockaddr;
- /** insp_inaddr for ipv4
- */
- typedef struct in_addr insp_inaddr;
-#define AF_FAMILY AF_INET
-#define PF_PROTOCOL PF_INET
-
-#endif
- /** Match raw binary data using CIDR rules.
- *
- * This function will use binary comparison to compare the
- * two bit sequences, address and mask, up to mask_bits
- * bits in size. If they match, it will return true.
- * @param address The whole address, of 4 or 16 bytes in length
- * @param mask The mask, from 1 to 16 bytes in length, anything
- * from 1 to 128 bits of which is significant
- * @param mask_Bits How many bits of the mask parameter are significant
- * for this comparison.
- * @returns True if the first mask_bits of address matches the first
- * mask_bits of mask.
- */
- bool MatchCIDRBits(unsigned char* address, unsigned char* mask, unsigned int mask_bits);
+ struct cidr_mask
+ {
+ /** Type, AF_INET or AF_INET6 */
+ unsigned char type;
+ /** Length of the mask in bits (0-128) */
+ unsigned char length;
+ /** Raw bits. Unused bits must be zero */
+ unsigned char bits[16];