|
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 |
{ |