lwip_hook_ip4_input.c 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * lwip_hook_ip4_input.c
  3. *
  4. * Created on: 20.05.2019
  5. * Author: balbekova
  6. */
  7. #include "common_config.h"
  8. #if defined WHITELIST_ENABLE
  9. #include "lwip_hook_ip4_input.h"
  10. #include "ip4.h"
  11. #include "settings_api.h"
  12. #include "parameters.h"
  13. #ifdef PRINTF_STDLIB
  14. #include <stdio.h>
  15. #endif
  16. #ifdef PRINTF_CUSTOM
  17. #include "tinystdio.h"
  18. #endif
  19. #include <string.h>
  20. #include <stdlib.h>
  21. int ip_input_hook(struct pbuf *p, struct netif *inp)
  22. {
  23. bool flag = true;
  24. struct ip_hdr *iphdr;
  25. uint32_t mask_white_list;
  26. uint32_t ip_white_list;
  27. char str[20];
  28. uint8_t len = 0;
  29. iphdr = (struct ip_hdr *)p->payload;
  30. for(uint8_t i = 0; i < MAX_WHITE_LIST; i ++){
  31. memset(str, 0, 20);
  32. GetWhiteListSTR(str, &len, i);
  33. GetWhiteListMask(&mask_white_list, i);
  34. GetWhiteListIP(&ip_white_list, i);
  35. if(strlen(str) != 0){
  36. if((iphdr->src.addr & mask_white_list) == (ip_white_list & mask_white_list)){
  37. flag = true;
  38. break;
  39. }
  40. else{
  41. flag = false;
  42. }
  43. }
  44. }
  45. if(flag){
  46. return 0;
  47. }
  48. else{
  49. pbuf_free(p);
  50. return 1;
  51. }
  52. }
  53. #endif