lwip_hook_ip4_input.c 981 B

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