Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. struct ip_session {
  2. struct ip_session *next;
  3. __be32 addr;
  4. __be32 netmask;
  5. };
  6. #define HASH_SESSION_SIZE 256
  7. #define HASH_SESSION(addr) (ntohr(addr) & 0xFF)
  8.  
  9. static struct ip_session *ip_sessions[HASH_SESSION_SIZE] = {};
  10. static inline struct ip_session **ip_session_bucket(__be32 addr)
  11. {
  12. __be32 h0 = HASH_SESSION(addr);
  13.  
  14. return (&(ip_sessions[h0]));
  15. }
  16.  
  17. static int ip_session_add1(__be32 addr, __be32 netmask)
  18. {
  19. struct ip_session *session, **ms;
  20.  
  21. write_lock(&session_lock);
  22.  
  23. if((session = (struct ip_session *)kzalloc(sizeof(struct ip_session), GFP_ATOMIC)) == NULL)
  24. {
  25. write_unlock(&session_lock);
  26. return -1;
  27. }
  28.  
  29. session->addr = addr;
  30. session->netmask = netmask;
  31.  
  32. ms = ip_session_bucket(addr);
  33. session->next = *ms;
  34. *ms = session;
  35.  
  36. write_unlock(&session_lock);
  37. return 0;
  38. }
  39.  
  40. static int ip_session_add2(__be32 addr, __be32 netmask)
  41. {
  42. struct ip_session *session, **ms;
  43. struct ip_session s;
  44.  
  45. write_lock(&session_lock);
  46.  
  47. session = &s;
  48.  
  49. session->addr = addr;
  50. session->netmask = netmask;
  51.  
  52. ms = ip_session_bucket(addr);
  53. session->next = *ms;
  54. *ms = session;
  55.  
  56. write_unlock(&session_lock);
  57. return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement