source:
freewrt/target/linux/generic-2.4/patches/226-atm_br2684.patch@
a3abab6
| Last change on this file since a3abab6 was 475ad56, checked in by , 20 years ago | |
|---|---|
|
|
| File size: 17.1 KB | |
-
net/atm/br2684.c
diff -urN linux-2.4.32/net/atm/br2684.c linux-2.4.32.new/net/atm/br2684.c
old new 55 55 #define skb_debug(skb) do {} while (0) 56 56 #endif 57 57 58 #define BR2684_LLC_LEN 3 59 #define BR2684_SNAP_LEN 3 60 #define BR2684_ETHERTYPE_LEN 2 61 #define BR2684_PID_LEN 2 62 #define BR2684_PAD_LEN 2 63 64 static unsigned char llc_common[] = { 0xaa, 0xaa, 0x03 }; 65 static unsigned char snap_bridged[] = { 0x00, 0x80, 0xc2 }; 66 static unsigned char snap_routed[] = { 0x00, 0x00, 0x00 }; 67 static unsigned char pid_ipv4[] = { 0x00, 0x07 }; 68 static unsigned char ethertype_ipv4[] = { 0x08, 0x00 }; 69 static unsigned char ethertype_ipv6[] = { 0x86, 0xdd }; 70 static unsigned char pad_bridged[] = { 0x00, 0x00 }; 71 58 72 static unsigned char llc_oui_pid_pad[] = 59 73 { 0xAA, 0xAA, 0x03, 0x00, 0x80, 0xC2, 0x00, 0x07, 0x00, 0x00 }; 74 static unsigned char llc_oui_ipv6[] = 75 { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x86, 0xdd }; 76 static unsigned char llc_oui_ipv4[] = 77 { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00 }; 60 78 #define PADLEN (2) 61 79 62 80 enum br2684_encaps { 63 e_vc = BR2684_ENCAPS_VC,81 e_vc = BR2684_ENCAPS_VC, 64 82 e_llc = BR2684_ENCAPS_LLC, 65 83 }; 66 84 67 85 struct br2684_vcc { 68 struct atm_vcc *atmvcc;86 struct atm_vcc *atmvcc; 69 87 struct br2684_dev *brdev; 70 88 /* keep old push,pop functions for chaining */ 71 void (*old_push) (struct atm_vcc *vcc,struct sk_buff *skb);89 void (*old_push) (struct atm_vcc * vcc, struct sk_buff * skb); 72 90 /* void (*old_pop)(struct atm_vcc *vcc,struct sk_buff *skb); */ 73 91 enum br2684_encaps encaps; 92 enum br2684_payload payload; 74 93 struct list_head brvccs; 75 94 #ifdef CONFIG_ATM_BR2684_IPFILTER 76 95 struct br2684_filter filter; 77 #endif /* CONFIG_ATM_BR2684_IPFILTER */96 #endif /* CONFIG_ATM_BR2684_IPFILTER */ 78 97 #ifndef FASTER_VERSION 79 98 unsigned copies_needed, copies_failed; 80 #endif /* FASTER_VERSION */99 #endif /* FASTER_VERSION */ 81 100 }; 82 101 83 102 struct br2684_dev { 84 103 struct net_device net_dev; 85 104 struct list_head br2684_devs; 86 105 int number; 87 struct list_head brvccs; /* one device <=> one vcc (before xmas) */106 struct list_head brvccs; /* one device <=> one vcc (before xmas) */ 88 107 struct net_device_stats stats; 89 108 int mac_was_set; 90 109 }; … … 173 192 } 174 193 skb = skb2; 175 194 } 176 skb_push(skb, minheadroom); 177 if (brvcc->encaps == e_llc) 178 memcpy(skb->data, llc_oui_pid_pad, 10); 179 else 180 memset(skb->data, 0, 2); 181 #endif /* FASTER_VERSION */ 195 196 /* This skb_push is a problem: routed packets need less headroom than 197 * bridged packets. 198 */ 199 200 /* skb_push(skb, minheadroom); */ 201 if (brvcc->encaps == e_llc) { 202 int offset = 0; 203 int actual_headroom; 204 205 actual_headroom = 206 BR2684_LLC_LEN + 207 BR2684_SNAP_LEN + 208 ((brvcc->payload == p_bridged) ? 209 (BR2684_PID_LEN + BR2684_PAD_LEN) : 210 BR2684_ETHERTYPE_LEN); 211 212 skb_push(skb, actual_headroom); 213 memcpy(skb->data, llc_common, BR2684_LLC_LEN); 214 offset += BR2684_LLC_LEN; 215 216 if (brvcc->payload == p_bridged) { 217 memcpy(skb->data + offset, snap_bridged, 218 BR2684_SNAP_LEN); 219 offset += BR2684_SNAP_LEN; 220 /* pid_ipv4 is poorly named. should probably be 221 * pid_ethernet 222 */ 223 memcpy(skb->data + offset, pid_ipv4, 224 BR2684_PID_LEN); 225 offset += BR2684_PID_LEN; 226 memcpy(skb->data + offset, pad_bridged, 227 BR2684_PAD_LEN); 228 offset += BR2684_PAD_LEN; 229 } else if (brvcc->payload == p_routed) { 230 unsigned short prot = 231 __constant_ntohs(skb->protocol); 232 memcpy(skb->data + offset, snap_routed, 233 BR2684_SNAP_LEN); 234 offset += BR2684_SNAP_LEN; 235 236 switch (prot) { 237 case ETH_P_IP: 238 memcpy(skb->data + offset, 239 ethertype_ipv4, 240 BR2684_ETHERTYPE_LEN); 241 break; 242 case ETH_P_IPV6: 243 memcpy(skb->data + offset, 244 ethertype_ipv6, 245 BR2684_ETHERTYPE_LEN); 246 break; 247 default: 248 dev_kfree_skb(skb); 249 return 0; 250 } 251 offset += BR2684_ETHERTYPE_LEN; 252 253 } 254 } else { 255 skb_push(skb, 2); 256 if (brvcc->payload == p_bridged) 257 memset(skb->data, 0, 2); 258 } 259 #endif /* FASTER_VERSION */ 182 260 skb_debug(skb); 183 261 184 262 ATM_SKB(skb)->vcc = atmvcc = brvcc->atmvcc; 185 DPRINTK("atm_skb(%p)->vcc(%p)->dev(%p)\n", skb, atmvcc, atmvcc->dev); 263 DPRINTK("atm_skb(%p)->vcc(%p)->dev(%p)\n", skb, atmvcc, 264 atmvcc->dev); 186 265 if (!atm_may_send(atmvcc, skb->truesize)) { 187 266 /* we free this here for now, because we cannot know in a higher 188 layer whether the skb point it supplied wasn't freed yet.189 now, it always is.190 */267 layer whether the skb point it supplied wasn't freed yet. 268 now, it always is. 269 */ 191 270 dev_kfree_skb(skb); 192 271 return 0; 193 }272 } 194 273 atomic_add(skb->truesize, &atmvcc->sk->wmem_alloc); 195 274 ATM_SKB(skb)->atm_options = atmvcc->atm_options; 196 275 brdev->stats.tx_packets++; … … 428 507 atm_return(atmvcc, skb->truesize); 429 508 DPRINTK("skb from brdev %p\n", brdev); 430 509 if (brvcc->encaps == e_llc) { 510 /* accept packets that have "ipv[46]" in the snap header */ 511 /* 8 - 2 == sizeof(llc_oui_ipv6) - BR2684_ETHERTYPE_LEN */ 512 if (memcmp(skb->data, llc_oui_ipv6, 8 - 2) == 0) { 513 plen = sizeof(llc_oui_ipv6); 514 515 if (memcmp(skb->data + 6, ethertype_ipv6, 2) == 0) 516 skb->protocol = 517 __constant_htons(ETH_P_IPV6); 518 else if (memcmp(skb->data + 6, ethertype_ipv4, 2) 519 == 0) 520 skb->protocol = __constant_htons(ETH_P_IP); 521 else { 522 brdev->stats.rx_errors++; 523 dev_kfree_skb(skb); 524 return; 525 } 526 skb_pull(skb, plen); 527 skb->nh.raw = skb->data; 528 skb->pkt_type = PACKET_HOST; 529 } 530 431 531 /* let us waste some time for checking the encapsulation. 432 532 Note, that only 7 char is checked so frames with a valid FCS 433 533 are also accepted (but FCS is not checked of course) */ 434 if (memcmp(skb->data, llc_oui_pid_pad, 7)) { 534 else if (memcmp(skb->data, llc_oui_pid_pad, 7) == 0) { 535 skb_pull(skb, plen - ETH_HLEN); 536 skb->protocol = 537 eth_type_trans(skb, &brdev->net_dev); 538 } else { 435 539 brdev->stats.rx_errors++; 436 540 dev_kfree_skb(skb); 437 541 return; 438 542 } 439 440 /* Strip FCS if present */441 if (skb->len > 7 && skb->data[7] == 0x01)442 __skb_trim(skb, skb->len - 4);443 543 } else { 444 544 plen = PADLEN + ETH_HLEN; /* pad, dstmac,srcmac, ethtype */ 445 545 /* first 2 chars should be 0 */ … … 448 548 dev_kfree_skb(skb); 449 549 return; 450 550 } 551 skb_pull(skb, plen - ETH_HLEN); 552 skb->protocol = eth_type_trans(skb, &brdev->net_dev); 451 553 } 452 554 if (skb->len < plen) { 453 555 brdev->stats.rx_errors++; 454 556 dev_kfree_skb(skb); /* dev_ not needed? */ 455 557 return; 456 558 } 457 458 559 #ifdef FASTER_VERSION 459 560 /* FIXME: tcpdump shows that pointer to mac header is 2 bytes earlier, 460 561 than should be. What else should I set? */ … … 465 566 skb->protocol = ((u16 *) skb->data)[-1]; 466 567 #else /* some protocols might require this: */ 467 568 skb->protocol = br_type_trans(skb, &brdev->net_dev); 468 #endif /* CONFIG_BR2684_FAST_TRANS */569 #endif /* CONFIG_BR2684_FAST_TRANS */ 469 570 #else 470 skb_pull(skb, plen - ETH_HLEN);471 skb->protocol = eth_type_trans(skb, &brdev->net_dev);472 #endif /* FASTER_VERSION */571 /* skb_pull(skb, plen - ETH_HLEN); */ 572 /* skb->protocol = eth_type_trans(skb, &brdev->net_dev); */ 573 #endif /* FASTER_VERSION */ 473 574 #ifdef CONFIG_ATM_BR2684_IPFILTER 474 575 if (packet_fails_filter(skb->protocol, brvcc, skb)) { 475 576 brdev->stats.rx_dropped++; 476 577 dev_kfree_skb(skb); 477 578 return; 478 579 } 479 #endif /* CONFIG_ATM_BR2684_IPFILTER */580 #endif /* CONFIG_ATM_BR2684_IPFILTER */ 480 581 skb->dev = &brdev->net_dev; 481 ATM_SKB(skb)->vcc = atmvcc;/* needed ? */582 /* ATM_SKB(skb)->vcc = atmvcc; *//* needed ? */ 482 583 DPRINTK("received packet's protocol: %x\n", ntohs(skb->protocol)); 483 584 skb_debug(skb); 484 if (!(brdev->net_dev.flags & IFF_UP)) { /* sigh, interface is down */585 if (!(brdev->net_dev.flags & IFF_UP)) { /* sigh, interface is down */ 485 586 brdev->stats.rx_dropped++; 486 587 dev_kfree_skb(skb); 487 588 return; 488 589 } 489 590 brdev->stats.rx_packets++; 490 591 brdev->stats.rx_bytes += skb->len; 491 memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data));492 592 netif_rx(skb); 493 593 } 494 594 … … 525 625 err = -EEXIST; 526 626 goto error; 527 627 } 528 if (be.fcs_in != BR2684_FCSIN_NO || be.fcs_out != BR2684_FCSOUT_NO ||529 be.fcs_auto || be.has_vpiid || be.send_padding || (be.encaps !=530 BR2684_ENCAPS_VC && be.encaps != BR2684_ENCAPS_LLC) ||531 be.min_size != 0) {628 if (be.fcs_in != BR2684_FCSIN_NO || be.fcs_out != BR2684_FCSOUT_NO 629 || be.fcs_auto || be.has_vpiid || be.send_padding 630 || (be.encaps != BR2684_ENCAPS_VC 631 && be.encaps != BR2684_ENCAPS_LLC) || be.min_size != 0) { 532 632 err = -EINVAL; 533 633 goto error; 534 634 } … … 554 654 brvcc->atmvcc = atmvcc; 555 655 atmvcc->user_back = brvcc; 556 656 brvcc->encaps = (enum br2684_encaps) be.encaps; 657 brvcc->payload = (enum br2684_payload) be.payload; 557 658 brvcc->old_push = atmvcc->push; 558 659 barrier(); 559 660 atmvcc->push = br2684_push; 560 661 skb_queue_head_init(©); 561 662 skb_migrate(&atmvcc->sk->receive_queue, ©); 562 663 while ((skb = skb_dequeue(©))) { 664 #ifdef notdef 563 665 BRPRIV(skb->dev)->stats.rx_bytes -= skb->len; 564 666 BRPRIV(skb->dev)->stats.rx_packets--; 667 #endif 565 668 br2684_push(atmvcc, skb); 566 669 } 567 670 return 0; 568 error:671 error: 569 672 write_unlock_irq(&devs_lock); 570 673 MOD_DEC_USE_COUNT; 571 674 return err; … … 608 711 609 712 if (ni.ifname[0] != '\0') { 610 713 memcpy(brdev->net_dev.name, ni.ifname, 611 sizeof(brdev->net_dev.name)); 612 brdev->net_dev.name[sizeof(brdev->net_dev.name) - 1] = '\0'; 714 sizeof(brdev->net_dev.name)); 715 brdev->net_dev.name[sizeof(brdev->net_dev.name) - 1] = 716 '\0'; 613 717 } else 614 718 sprintf(brdev->net_dev.name, "nas%d", brdev->number); 615 719 DPRINTK("registered netdev %s\n", brdev->net_dev.name); 616 ether_setup(&brdev->net_dev); 720 if (ni.payload == p_routed) { 721 brdev->net_dev.hard_header_len = 0; 722 brdev->net_dev.addr_len = 0; 723 brdev->net_dev.mtu = 1500; 724 725 /* Type PPP seems most suitable */ 726 brdev->net_dev.type = ARPHRD_PPP; 727 brdev->net_dev.flags = 728 IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST; 729 brdev->net_dev.tx_queue_len = 100; 730 } else { 731 ether_setup(&brdev->net_dev); 732 } 617 733 brdev->mac_was_set = 0; 618 734 #ifdef FASTER_VERSION 619 735 my_eth_header = brdev->net_dev.hard_header; … … 677 793 err = br2684_setfilt(atmvcc, arg); 678 794 MOD_DEC_USE_COUNT; 679 795 return err; 680 #endif /* CONFIG_ATM_BR2684_IPFILTER */796 #endif /* CONFIG_ATM_BR2684_IPFILTER */ 681 797 } 682 798 return -ENOIOCTLCMD; 683 799 } 684 800 685 #ifdef CONFIG_PROC_FS686 801 /* Never put more than 256 bytes in at once */ 687 802 static int br2684_proc_engine(loff_t pos, char *buf) 688 803 { … … 692 807 list_for_each(lhd, &br2684_devs) { 693 808 brdev = list_entry_brdev(lhd); 694 809 if (pos-- == 0) 695 return sprintf(buf, "dev %.16s: num=%d, mac=%02X:%02X:" 696 "%02X:%02X:%02X:%02X (%s)\n", brdev->net_dev.name, 697 brdev->number, 698 brdev->net_dev.dev_addr[0], 699 brdev->net_dev.dev_addr[1], 700 brdev->net_dev.dev_addr[2], 701 brdev->net_dev.dev_addr[3], 702 brdev->net_dev.dev_addr[4], 703 brdev->net_dev.dev_addr[5], 704 brdev->mac_was_set ? "set" : "auto"); 810 return sprintf(buf, 811 "dev %.16s: num=%d, mac=%02X:%02X:" 812 "%02X:%02X:%02X:%02X (%s)\n", 813 brdev->net_dev.name, brdev->number, 814 brdev->net_dev.dev_addr[0], 815 brdev->net_dev.dev_addr[1], 816 brdev->net_dev.dev_addr[2], 817 brdev->net_dev.dev_addr[3], 818 brdev->net_dev.dev_addr[4], 819 brdev->net_dev.dev_addr[5], 820 brdev-> 821 mac_was_set ? "set" : "auto"); 705 822 list_for_each(lhc, &brdev->brvccs) { 706 823 brvcc = list_entry_brvcc(lhc); 707 824 if (pos-- == 0) 708 return sprintf(buf, " vcc %d.%d.%d: encaps=%s" 825 return sprintf(buf, 826 " vcc %d.%d.%d: encaps=%s" 827 ", payload=%s" 709 828 #ifndef FASTER_VERSION 710 ", failed copies %u/%u" 711 #endif /* FASTER_VERSION */ 712 "\n", brvcc->atmvcc->dev->number, 713 brvcc->atmvcc->vpi, brvcc->atmvcc->vci, 714 (brvcc->encaps == e_llc) ? "LLC" : "VC" 829 ", failed copies %u/%u" 830 #endif /* FASTER_VERSION */ 831 "\n", 832 brvcc->atmvcc->dev->number, 833 brvcc->atmvcc->vpi, 834 brvcc->atmvcc->vci, 835 (brvcc->encaps == 836 e_llc) ? "LLC" : "VC", 837 (brvcc->payload == 838 p_bridged) ? "bridged" : 839 "routed" 715 840 #ifndef FASTER_VERSION 716 , brvcc->copies_failed717 ,brvcc->copies_needed718 #endif /* FASTER_VERSION */841 , brvcc->copies_failed, 842 brvcc->copies_needed 843 #endif /* FASTER_VERSION */ 719 844 ); 720 845 #ifdef CONFIG_ATM_BR2684_IPFILTER 721 846 #define b1(var, byte) ((u8 *) &brvcc->filter.var)[byte] 722 847 #define bs(var) b1(var, 0), b1(var, 1), b1(var, 2), b1(var, 3) 723 848 if (brvcc->filter.netmask != 0 && pos-- == 0) 724 return sprintf(buf, " filter=%d.%d.%d.%d/" 725 "%d.%d.%d.%d\n", bs(prefix), bs(netmask)); 849 return sprintf(buf, 850 " filter=%d.%d.%d.%d/" 851 "%d.%d.%d.%d\n", bs(prefix), 852 bs(netmask)); 726 853 #undef bs 727 854 #undef b1 728 #endif /* CONFIG_ATM_BR2684_IPFILTER */855 #endif /* CONFIG_ATM_BR2684_IPFILTER */ 729 856 } 730 857 } 731 858 return 0; 732 859 } 733 860 734 861 static ssize_t br2684_proc_read(struct file *file, char *buf, size_t count, 735 loff_t *pos)862 loff_t * pos) 736 863 { 737 864 unsigned long page; 738 865 int len = 0, x, left; 739 loff_t n = *pos;740 741 866 page = get_free_page(GFP_KERNEL); 742 867 if (!page) 743 868 return -ENOMEM; … … 746 871 left = count; 747 872 read_lock(&devs_lock); 748 873 for (;;) { 749 x = br2684_proc_engine( n, &((char *) page)[len]);874 x = br2684_proc_engine(*pos, &((char *) page)[len]); 750 875 if (x == 0) 751 876 break; 752 877 if (x > left) … … 761 886 } 762 887 len += x; 763 888 left -= x; 764 n++;889 (*pos)++; 765 890 if (left < 256) 766 891 break; 767 892 } 768 893 read_unlock(&devs_lock); 769 *pos = n;770 894 if (len > 0 && copy_to_user(buf, (char *) page, len)) 771 895 len = -EFAULT; 772 896 free_page(page); … … 774 898 } 775 899 776 900 static struct file_operations br2684_proc_operations = { 777 read:br2684_proc_read,901 read:br2684_proc_read, 778 902 }; 779 903 780 904 extern struct proc_dir_entry *atm_proc_root; /* from proc.c */ 781 #endif /* CONFIG_PROC_FS */782 905 783 906 /* the following avoids some spurious warnings from the compiler */ 784 907 #define UNUSED __attribute__((unused)) 785 908 786 909 static int __init UNUSED br2684_init(void) 787 910 { 788 #ifdef CONFIG_PROC_FS789 911 struct proc_dir_entry *p; 790 912 if ((p = create_proc_entry("br2684", 0, atm_proc_root)) == NULL) 791 913 return -ENOMEM; 792 914 p->proc_fops = &br2684_proc_operations; 793 #endif /* CONFIG_PROC_FS */794 915 br2684_ioctl_set(br2684_ioctl); 795 916 return 0; 796 917 } … … 799 920 { 800 921 struct br2684_dev *brdev; 801 922 br2684_ioctl_set(NULL); 802 #ifdef CONFIG_PROC_FS803 923 remove_proc_entry("br2684", atm_proc_root); 804 #endif /* CONFIG_PROC_FS */805 924 while (!list_empty(&br2684_devs)) { 806 925 brdev = list_entry_brdev(br2684_devs.next); 807 926 unregister_netdev(&brdev->net_dev); -
net/atm/common.c
diff -urN linux-2.4.32/net/atm/common.c linux-2.4.32.new/net/atm/common.c
old new 158 158 } 159 159 #ifdef CONFIG_ATM_BR2684_MODULE 160 160 EXPORT_SYMBOL(br2684_ioctl_set); 161 EXPORT_SYMBOL(br2684_ioctl_hook); 161 162 #endif 162 163 #endif 163 164 -
include/linux/atmbr2684.h
old new 3 3 4 4 #include <linux/atm.h> 5 5 #include <linux/if.h> /* For IFNAMSIZ */ 6 #include <linux/if_ether.h> /* ETH_P_* */ 6 7 7 8 /* 8 9 * Type of media we're bridging (ethernet, token ring, etc) Currently only … … 36 37 #define BR2684_ENCAPS_AUTODETECT (2) /* Unsuported */ 37 38 38 39 /* 40 * Is this VC bridged or routed? 41 */ 42 43 #define BR2684_PAYLOAD_ROUTED (0) 44 #define BR2684_PAYLOAD_BRIDGED (1) 45 46 47 /* 39 48 * This is for the ATM_NEWBACKENDIF call - these are like socket families: 40 49 * the first element of the structure is the backend number and the rest 41 50 * is per-backend specific 42 51 */ 43 52 struct atm_newif_br2684 { 44 atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */ 45 int media; /* BR2684_MEDIA_* */ 46 char ifname[IFNAMSIZ]; 47 int mtu; 53 atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */ 54 int media; /* BR2684_MEDIA_* */ 55 char ifname[IFNAMSIZ]; 56 int mtu; 57 int payload; /* bridged or routed */ 48 58 }; 49 59 50 60 /* … … 68 78 * is per-backend specific 69 79 */ 70 80 struct atm_backend_br2684 { 71 atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */81 atm_backend_t backend_num; /* ATM_BACKEND_BR2684 */ 72 82 struct br2684_if_spec ifspec; 73 int fcs_in; /* BR2684_FCSIN_* */ 74 int fcs_out; /* BR2684_FCSOUT_* */ 75 int fcs_auto; /* 1: fcs_{in,out} disabled if no FCS rx'ed */ 76 int encaps; /* BR2684_ENCAPS_* */ 77 int has_vpiid; /* 1: use vpn_id - Unsupported */ 78 __u8 vpn_id[7]; 79 int send_padding; /* unsupported */ 80 int min_size; /* we will pad smaller packets than this */ 83 int fcs_in; /* BR2684_FCSIN_* */ 84 int fcs_out; /* BR2684_FCSOUT_* */ 85 int fcs_auto; /* 1: fcs_{in,out} disabled if no FCS rx'ed */ 86 int encaps; /* BR2684_ENCAPS_* */ 87 int payload; /* BR2684_PAYLOAD_* */ 88 int has_vpiid; /* 1: use vpn_id - Unsupported */ 89 __u8 vpn_id[7]; 90 int send_padding; /* unsupported */ 91 int min_size; /* we will pad smaller packets than this */ 81 92 }; 82 93 83 94 /* … … 95 106 struct br2684_filter filter; 96 107 }; 97 108 109 enum br2684_payload { 110 p_routed = BR2684_PAYLOAD_ROUTED, 111 p_bridged = BR2684_PAYLOAD_BRIDGED, 112 }; 113 98 114 #define BR2684_SETFILT _IOW( 'a', ATMIOC_BACKEND + 0, \ 99 115 struct br2684_filter_set) 100 116 101 #endif /* _LINUX_ATMBR2684_H */117 #endif /* _LINUX_ATMBR2684_H */
Note:
See TracBrowser
for help on using the repository browser.
