Skip to content

Commit

Permalink
Optimized apply_mask fn
Browse files Browse the repository at this point in the history
  • Loading branch information
sachinites committed Apr 19, 2020
1 parent 4cfd517 commit e8a0b06
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions spfutil.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include "advert.h"
#include "spftrace.h"
#include "LinuxMemoryManager/uapi_mm.h"
#include <stdint.h>

extern instance_t *instance;

Expand Down Expand Up @@ -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';
Expand Down

0 comments on commit e8a0b06

Please sign in to comment.