From e8a0b06a475c3b2c0a3d5a66408de43bca1e025c Mon Sep 17 00:00:00 2001 From: sachinites Date: Sat, 18 Apr 2020 21:49:09 -0700 Subject: [PATCH] Optimized apply_mask fn --- spfutil.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/spfutil.c b/spfutil.c index 8c0f7b5..235b345 100644 --- a/spfutil.c +++ b/spfutil.c @@ -37,6 +37,7 @@ #include "advert.h" #include "spftrace.h" #include "LinuxMemoryManager/uapi_mm.h" +#include extern instance_t *instance; @@ -229,11 +230,25 @@ spf_determine_multi_area_attachment(spf_info_t *spf_info, void apply_mask(char *prefix, char mask, char *str_prefix){ - unsigned int binary_prefix = 0, i = 0; + uint32_t binary_prefix = 0; + uint32_t subnet_mask = 0xFFFFFFFF; + + if(mask == 32){ + strncpy(str_prefix, prefix, PREFIX_LEN); + str_prefix[PREFIX_LEN] = '\0'; + return; + } + /*Convert Given IP address into binary format*/ inet_pton(AF_INET, prefix, &binary_prefix); binary_prefix = htonl(binary_prefix); - for(; i < (32 - mask); i++) - UNSET_BIT(binary_prefix, i); + + /*Compute Mask in binary format as well*/ + subnet_mask = subnet_mask << (32 - mask); + + /*Perform logical AND to apply mask on IP address*/ + binary_prefix = binary_prefix & subnet_mask; + + /*Convert the Final IP into string format again*/ binary_prefix = htonl(binary_prefix); inet_ntop(AF_INET, &binary_prefix, str_prefix, PREFIX_LEN + 1); str_prefix[PREFIX_LEN] = '\0';