Lines 5-14
Link Here
|
5 |
* File: interceptor.c |
5 |
* File: interceptor.c |
6 |
* Date: 04/10/2001 |
6 |
* Date: 04/10/2001 |
7 |
* |
7 |
* |
|
|
8 |
* Updated to work with Linux kernels >=2.6.19 (including 2.6.22) by |
9 |
* Alexander Griesser 29/05/07 <cisco@tuxx-home.at> |
10 |
* |
8 |
*************************************************************************** |
11 |
*************************************************************************** |
9 |
* This module implements the linux driver. |
12 |
* This module implements the linux driver. |
10 |
***************************************************************************/ |
13 |
***************************************************************************/ |
11 |
#include <linux/config.h> |
14 |
#include <linux/autoconf.h> |
12 |
#include <linux/version.h> |
15 |
#include <linux/version.h> |
13 |
#include <linux/module.h> |
16 |
#include <linux/module.h> |
14 |
#include <linux/init.h> |
17 |
#include <linux/init.h> |
Lines 339-351
Link Here
|
339 |
|
342 |
|
340 |
dp = NULL; |
343 |
dp = NULL; |
341 |
num_target_devices = 0; |
344 |
num_target_devices = 0; |
342 |
for (dp = dev_base; dp != NULL; dp = dp->next) |
345 |
|
343 |
{ |
346 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) |
|
|
347 |
for_each_netdev(dp) |
348 |
#else |
349 |
for (dp = dev_base; dp != NULL; dp = dp->next) |
350 |
#endif |
351 |
{ |
344 |
if (add_netdev(dp) == 0) |
352 |
if (add_netdev(dp) == 0) |
345 |
{ |
353 |
{ |
346 |
num_target_devices++; |
354 |
num_target_devices++; |
347 |
} |
355 |
} |
348 |
} |
356 |
} |
349 |
|
357 |
|
350 |
if (num_target_devices == 0) |
358 |
if (num_target_devices == 0) |
351 |
{ |
359 |
{ |
Lines 550-562
Link Here
|
550 |
goto exit_gracefully; |
558 |
goto exit_gracefully; |
551 |
} |
559 |
} |
552 |
|
560 |
|
553 |
if (skb->ip_summed == CHECKSUM_HW) |
561 |
if (CHECK_IP_SUMMED(skb->ip_summed)) |
554 |
{ |
562 |
{ |
555 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
563 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
556 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
564 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
557 |
if (skb_checksum_help(skb,1)) |
565 |
if (SKB_CHECKSUM_HELP(skb,1)) |
558 |
#else |
566 |
#else |
559 |
if (skb_checksum_help(&skb,1)) |
567 |
if (SKB_CHECKSUM_HELP(&skb,1)) |
560 |
#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
568 |
#endif // LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
561 |
{ |
569 |
{ |
562 |
dev_kfree_skb(skb); |
570 |
dev_kfree_skb(skb); |
Lines 569-577
Link Here
|
569 |
} |
577 |
} |
570 |
|
578 |
|
571 |
reset_inject_status(&pBinding->recv_stat); |
579 |
reset_inject_status(&pBinding->recv_stat); |
572 |
if (skb->mac.raw) |
580 |
|
|
|
581 |
if (CISCOVPN_SKB_MACHEADER(skb)) |
573 |
{ |
582 |
{ |
574 |
hard_header_len = skb->data - skb->mac.raw; |
583 |
hard_header_len = skb->data - CISCOVPN_SKB_MACHEADER(skb); |
575 |
if ((hard_header_len < 0) || (hard_header_len > skb_headroom(skb))) |
584 |
if ((hard_header_len < 0) || (hard_header_len > skb_headroom(skb))) |
576 |
{ |
585 |
{ |
577 |
printk(KERN_DEBUG "bad hh len %d\n", hard_header_len); |
586 |
printk(KERN_DEBUG "bad hh len %d\n", hard_header_len); |
Lines 588-594
Link Here
|
588 |
switch (hard_header_len) |
597 |
switch (hard_header_len) |
589 |
{ |
598 |
{ |
590 |
case ETH_HLEN: |
599 |
case ETH_HLEN: |
591 |
CniNewFragment(ETH_HLEN, skb->mac.raw, &MacHdr, CNI_USE_BUFFER); |
600 |
CniNewFragment(ETH_HLEN, CISCOVPN_SKB_MACHEADER(skb), &MacHdr, CNI_USE_BUFFER); |
592 |
break; |
601 |
break; |
593 |
case IPPP_MAX_HEADER: |
602 |
case IPPP_MAX_HEADER: |
594 |
case 0: |
603 |
case 0: |
Lines 677-690
Link Here
|
677 |
tmp_InjectSend = NULL; |
686 |
tmp_InjectSend = NULL; |
678 |
|
687 |
|
679 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
688 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
680 |
if (skb->ip_summed == CHECKSUM_HW) |
689 |
if (CHECK_IP_SUMMED(skb->ip_summed)) |
681 |
{ |
690 |
{ |
682 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
691 |
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) |
683 |
if (skb_checksum_help(skb,0)) |
692 |
if (SKB_CHECKSUM_HELP(skb,0)) |
684 |
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
693 |
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
685 |
if (skb_checksum_help(&skb,0)) |
694 |
if (SKB_CHECKSUM_HELP(&skb,0)) |
686 |
#else |
695 |
#else |
687 |
if ((skb = skb_checksum_help(skb)) == NULL) |
696 |
if ((skb = SKB_CHECKSUM_HELP(skb)) == NULL) |
688 |
#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
697 |
#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7) |
689 |
{ |
698 |
{ |
690 |
goto exit_gracefully; |
699 |
goto exit_gracefully; |
Lines 692-698
Link Here
|
692 |
} |
701 |
} |
693 |
#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
702 |
#endif //LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) |
694 |
reset_inject_status(&pBinding->send_stat); |
703 |
reset_inject_status(&pBinding->send_stat); |
695 |
hard_header_len = skb->nh.raw - skb->data; |
704 |
|
|
|
705 |
hard_header_len = CISCOVPN_SKB_NETWORKHEADER(skb) - skb->data; |
696 |
pBinding->send_real_hh_len = hard_header_len; |
706 |
pBinding->send_real_hh_len = hard_header_len; |
697 |
switch (hard_header_len) |
707 |
switch (hard_header_len) |
698 |
{ |
708 |
{ |