Lines 83-88
Link Here
|
83 |
|
83 |
|
84 |
static int vpn_is_up = FALSE; |
84 |
static int vpn_is_up = FALSE; |
85 |
|
85 |
|
|
|
86 |
// LAN ACCESS PATCH: Module parameter used to retrieve "gateway" address from user space |
87 |
static int gateway[4] = { 0,0,0,0 }; |
88 |
module_param_array(gateway, uint, NULL, 0644); |
89 |
MODULE_PARM_DESC(gateway," Gateway's public address (separated by ',') to be passed from user space."); |
90 |
|
86 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
91 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
87 |
#define interceptor_name LINUX_VPN_IFNAME |
92 |
#define interceptor_name LINUX_VPN_IFNAME |
88 |
#else |
93 |
#else |
Lines 362-368
Link Here
|
362 |
goto error_exit; |
367 |
goto error_exit; |
363 |
} |
368 |
} |
364 |
vpn_is_up = TRUE; |
369 |
vpn_is_up = TRUE; |
365 |
return error; |
370 |
// LAN ACCESS PATCH: Display current "gateway" information from user space |
|
|
371 |
printk(KERN_INFO "LAN ACCESS: vpn_is_up: gateway from userspace: %d.%d.%d.%d\n", |
372 |
gateway[0], gateway[1], gateway[2], gateway[3]); |
373 |
return error; |
366 |
|
374 |
|
367 |
error_exit: |
375 |
error_exit: |
368 |
do_cleanup(); |
376 |
do_cleanup(); |
Lines 558-563
Link Here
|
558 |
goto exit_gracefully; |
566 |
goto exit_gracefully; |
559 |
} |
567 |
} |
560 |
|
568 |
|
|
|
569 |
// LAN ACCESS PATCH: re-route traffic to original ip handler, if not receiving from VPN gateway's public address |
570 |
if ( vpn_is_up && strcmp(dev->name,LINUX_VPN_IFNAME) && |
571 |
(gateway[0] || gateway[1] || gateway[2] || gateway[3]) && |
572 |
( |
573 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->saddr))[0] != gateway[0]) || |
574 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->saddr))[1] != gateway[1]) || |
575 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->saddr))[2] != gateway[2]) || |
576 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->saddr))[3] != gateway[3]) ) ) { |
577 |
/* |
578 |
printk(KERN_INFO "LAN ACCESS: recv_ip_packet_handler(%s): %u.%u.%u.%u --> %u.%u.%u.%u\n", |
579 |
dev->name, |
580 |
NIPQUAD(CISCOVPN_SKB_IPHEADER(skb)->saddr), |
581 |
NIPQUAD(CISCOVPN_SKB_IPHEADER(skb)->daddr)); |
582 |
*/ |
583 |
rc2 = original_ip_handler.orig_handler_func(skb, dev, type); |
584 |
goto exit_gracefully; |
585 |
} |
586 |
|
561 |
if (CHECK_IP_SUMMED(skb->ip_summed)) |
587 |
if (CHECK_IP_SUMMED(skb->ip_summed)) |
562 |
{ |
588 |
{ |
563 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
589 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
Lines 817-822
Link Here
|
817 |
goto exit_gracefully; |
843 |
goto exit_gracefully; |
818 |
} |
844 |
} |
819 |
|
845 |
|
|
|
846 |
// LAN ACCESS PATCH: re-route traffic to original ip handler, if not sending to VPN gateway's public address |
847 |
if ( vpn_is_up && strcmp(dev->name,LINUX_VPN_IFNAME) && |
848 |
(gateway[0] || gateway[1] || gateway[2] || gateway[3]) && |
849 |
( |
850 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->daddr))[0] != gateway[0]) || |
851 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->daddr))[1] != gateway[1]) || |
852 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->daddr))[2] != gateway[2]) || |
853 |
(((unsigned char *)&(CISCOVPN_SKB_IPHEADER(skb)->daddr))[3] != gateway[3]) ) ) { |
854 |
/* |
855 |
printk(KERN_INFO "LAN ACCESS: replacement_dev_xmit(%s): %u.%u.%u.%u --> %u.%u.%u.%u\n", |
856 |
dev->name, |
857 |
NIPQUAD(CISCOVPN_SKB_IPHEADER(skb)->saddr), |
858 |
NIPQUAD(CISCOVPN_SKB_IPHEADER(skb)->daddr)); |
859 |
*/ |
860 |
rc2 = pBinding->InjectSend(skb, dev); |
861 |
goto exit_gracefully; |
862 |
} |
863 |
|
820 |
if (need_reorder_frag(skb)) |
864 |
if (need_reorder_frag(skb)) |
821 |
{ |
865 |
{ |
822 |
rc2 = handle_fragment(pBinding, skb, dev); |
866 |
rc2 = handle_fragment(pBinding, skb, dev); |