diff options
Diffstat (limited to 'drivers/isdn/i4l')
-rw-r--r-- | drivers/isdn/i4l/isdn_net.c | 127 | ||||
-rw-r--r-- | drivers/isdn/i4l/isdn_net.h | 43 |
2 files changed, 60 insertions, 110 deletions
diff --git a/drivers/isdn/i4l/isdn_net.c b/drivers/isdn/i4l/isdn_net.c index 1bfc55d7a26c..ad17a47ecc06 100644 --- a/drivers/isdn/i4l/isdn_net.c +++ b/drivers/isdn/i4l/isdn_net.c | |||
@@ -890,15 +890,15 @@ isdn_net_log_skb(struct sk_buff * skb, isdn_net_local * lp) | |||
890 | proto = ETH_P_IP; | 890 | proto = ETH_P_IP; |
891 | switch (lp->p_encap) { | 891 | switch (lp->p_encap) { |
892 | case ISDN_NET_ENCAP_IPTYP: | 892 | case ISDN_NET_ENCAP_IPTYP: |
893 | proto = ntohs(*(unsigned short *) &buf[0]); | 893 | proto = ntohs(*(__be16 *)&buf[0]); |
894 | p = &buf[2]; | 894 | p = &buf[2]; |
895 | break; | 895 | break; |
896 | case ISDN_NET_ENCAP_ETHER: | 896 | case ISDN_NET_ENCAP_ETHER: |
897 | proto = ntohs(*(unsigned short *) &buf[12]); | 897 | proto = ntohs(*(__be16 *)&buf[12]); |
898 | p = &buf[14]; | 898 | p = &buf[14]; |
899 | break; | 899 | break; |
900 | case ISDN_NET_ENCAP_CISCOHDLC: | 900 | case ISDN_NET_ENCAP_CISCOHDLC: |
901 | proto = ntohs(*(unsigned short *) &buf[2]); | 901 | proto = ntohs(*(__be16 *)&buf[2]); |
902 | p = &buf[4]; | 902 | p = &buf[4]; |
903 | break; | 903 | break; |
904 | #ifdef CONFIG_ISDN_PPP | 904 | #ifdef CONFIG_ISDN_PPP |
@@ -942,18 +942,12 @@ isdn_net_log_skb(struct sk_buff * skb, isdn_net_local * lp) | |||
942 | strcpy(addinfo, " IDP"); | 942 | strcpy(addinfo, " IDP"); |
943 | break; | 943 | break; |
944 | } | 944 | } |
945 | printk(KERN_INFO | 945 | printk(KERN_INFO "OPEN: %pI4 -> %pI4%s\n", |
946 | "OPEN: %d.%d.%d.%d -> %d.%d.%d.%d%s\n", | 946 | p + 12, p + 16, addinfo); |
947 | |||
948 | p[12], p[13], p[14], p[15], | ||
949 | p[16], p[17], p[18], p[19], | ||
950 | addinfo); | ||
951 | break; | 947 | break; |
952 | case ETH_P_ARP: | 948 | case ETH_P_ARP: |
953 | printk(KERN_INFO | 949 | printk(KERN_INFO "OPEN: ARP %pI4 -> *.*.*.* ?%pI4\n", |
954 | "OPEN: ARP %d.%d.%d.%d -> *.*.*.* ?%d.%d.%d.%d\n", | 950 | p + 14, p + 24); |
955 | p[14], p[15], p[16], p[17], | ||
956 | p[24], p[25], p[26], p[27]); | ||
957 | break; | 951 | break; |
958 | } | 952 | } |
959 | } | 953 | } |
@@ -1539,15 +1533,16 @@ isdn_net_ciscohdlck_slarp_send_keepalive(unsigned long data) | |||
1539 | p = skb_put(skb, 4 + 14); | 1533 | p = skb_put(skb, 4 + 14); |
1540 | 1534 | ||
1541 | /* cisco header */ | 1535 | /* cisco header */ |
1542 | p += put_u8 (p, CISCO_ADDR_UNICAST); | 1536 | *(u8 *)(p + 0) = CISCO_ADDR_UNICAST; |
1543 | p += put_u8 (p, CISCO_CTRL); | 1537 | *(u8 *)(p + 1) = CISCO_CTRL; |
1544 | p += put_u16(p, CISCO_TYPE_SLARP); | 1538 | *(__be16 *)(p + 2) = cpu_to_be16(CISCO_TYPE_SLARP); |
1545 | 1539 | ||
1546 | /* slarp keepalive */ | 1540 | /* slarp keepalive */ |
1547 | p += put_u32(p, CISCO_SLARP_KEEPALIVE); | 1541 | *(__be32 *)(p + 4) = cpu_to_be32(CISCO_SLARP_KEEPALIVE); |
1548 | p += put_u32(p, lp->cisco_myseq); | 1542 | *(__be32 *)(p + 8) = cpu_to_be32(lp->cisco_myseq); |
1549 | p += put_u32(p, lp->cisco_yourseq); | 1543 | *(__be32 *)(p + 12) = cpu_to_be32(lp->cisco_yourseq); |
1550 | p += put_u16(p, 0xffff); // reliablity, always 0xffff | 1544 | *(__be16 *)(p + 16) = cpu_to_be16(0xffff); // reliablity, always 0xffff |
1545 | p += 18; | ||
1551 | 1546 | ||
1552 | isdn_net_write_super(lp, skb); | 1547 | isdn_net_write_super(lp, skb); |
1553 | 1548 | ||
@@ -1569,15 +1564,16 @@ isdn_net_ciscohdlck_slarp_send_request(isdn_net_local *lp) | |||
1569 | p = skb_put(skb, 4 + 14); | 1564 | p = skb_put(skb, 4 + 14); |
1570 | 1565 | ||
1571 | /* cisco header */ | 1566 | /* cisco header */ |
1572 | p += put_u8 (p, CISCO_ADDR_UNICAST); | 1567 | *(u8 *)(p + 0) = CISCO_ADDR_UNICAST; |
1573 | p += put_u8 (p, CISCO_CTRL); | 1568 | *(u8 *)(p + 1) = CISCO_CTRL; |
1574 | p += put_u16(p, CISCO_TYPE_SLARP); | 1569 | *(__be16 *)(p + 2) = cpu_to_be16(CISCO_TYPE_SLARP); |
1575 | 1570 | ||
1576 | /* slarp request */ | 1571 | /* slarp request */ |
1577 | p += put_u32(p, CISCO_SLARP_REQUEST); | 1572 | *(__be32 *)(p + 4) = cpu_to_be32(CISCO_SLARP_REQUEST); |
1578 | p += put_u32(p, 0); // address | 1573 | *(__be32 *)(p + 8) = cpu_to_be32(0); // address |
1579 | p += put_u32(p, 0); // netmask | 1574 | *(__be32 *)(p + 12) = cpu_to_be32(0); // netmask |
1580 | p += put_u16(p, 0); // unused | 1575 | *(__be16 *)(p + 16) = cpu_to_be16(0); // unused |
1576 | p += 18; | ||
1581 | 1577 | ||
1582 | isdn_net_write_super(lp, skb); | 1578 | isdn_net_write_super(lp, skb); |
1583 | } | 1579 | } |
@@ -1634,18 +1630,17 @@ isdn_net_ciscohdlck_slarp_send_reply(isdn_net_local *lp) | |||
1634 | p = skb_put(skb, 4 + 14); | 1630 | p = skb_put(skb, 4 + 14); |
1635 | 1631 | ||
1636 | /* cisco header */ | 1632 | /* cisco header */ |
1637 | p += put_u8 (p, CISCO_ADDR_UNICAST); | 1633 | *(u8 *)(p + 0) = CISCO_ADDR_UNICAST; |
1638 | p += put_u8 (p, CISCO_CTRL); | 1634 | *(u8 *)(p + 1) = CISCO_CTRL; |
1639 | p += put_u16(p, CISCO_TYPE_SLARP); | 1635 | *(__be16 *)(p + 2) = cpu_to_be16(CISCO_TYPE_SLARP); |
1640 | 1636 | ||
1641 | /* slarp reply, send own ip/netmask; if values are nonsense remote | 1637 | /* slarp reply, send own ip/netmask; if values are nonsense remote |
1642 | * should think we are unable to provide it with an address via SLARP */ | 1638 | * should think we are unable to provide it with an address via SLARP */ |
1643 | p += put_u32(p, CISCO_SLARP_REPLY); | 1639 | *(__be32 *)(p + 4) = cpu_to_be32(CISCO_SLARP_REPLY); |
1644 | *(__be32 *)p = addr; // address | 1640 | *(__be32 *)(p + 8) = addr; // address |
1645 | p += 4; | 1641 | *(__be32 *)(p + 12) = mask; // netmask |
1646 | *(__be32 *)p = mask; // netmask | 1642 | *(__be16 *)(p + 16) = cpu_to_be16(0); // unused |
1647 | p += 4; | 1643 | p += 18; |
1648 | p += put_u16(p, 0); // unused | ||
1649 | 1644 | ||
1650 | isdn_net_write_super(lp, skb); | 1645 | isdn_net_write_super(lp, skb); |
1651 | } | 1646 | } |
@@ -1656,44 +1651,39 @@ isdn_net_ciscohdlck_slarp_in(isdn_net_local *lp, struct sk_buff *skb) | |||
1656 | unsigned char *p; | 1651 | unsigned char *p; |
1657 | int period; | 1652 | int period; |
1658 | u32 code; | 1653 | u32 code; |
1659 | u32 my_seq, addr; | 1654 | u32 my_seq; |
1660 | u32 your_seq, mask; | 1655 | u32 your_seq; |
1661 | u32 local; | 1656 | __be32 local; |
1657 | __be32 *addr, *mask; | ||
1662 | u16 unused; | 1658 | u16 unused; |
1663 | 1659 | ||
1664 | if (skb->len < 14) | 1660 | if (skb->len < 14) |
1665 | return; | 1661 | return; |
1666 | 1662 | ||
1667 | p = skb->data; | 1663 | p = skb->data; |
1668 | p += get_u32(p, &code); | 1664 | code = be32_to_cpup((__be32 *)p); |
1669 | 1665 | p += 4; | |
1666 | |||
1670 | switch (code) { | 1667 | switch (code) { |
1671 | case CISCO_SLARP_REQUEST: | 1668 | case CISCO_SLARP_REQUEST: |
1672 | lp->cisco_yourseq = 0; | 1669 | lp->cisco_yourseq = 0; |
1673 | isdn_net_ciscohdlck_slarp_send_reply(lp); | 1670 | isdn_net_ciscohdlck_slarp_send_reply(lp); |
1674 | break; | 1671 | break; |
1675 | case CISCO_SLARP_REPLY: | 1672 | case CISCO_SLARP_REPLY: |
1676 | addr = ntohl(*(u32 *)p); | 1673 | addr = (__be32 *)p; |
1677 | mask = ntohl(*(u32 *)(p+4)); | 1674 | mask = (__be32 *)(p + 4); |
1678 | if (mask != 0xfffffffc) | 1675 | if (*mask != cpu_to_be32(0xfffffffc)) |
1679 | goto slarp_reply_out; | 1676 | goto slarp_reply_out; |
1680 | if ((addr & 3) == 0 || (addr & 3) == 3) | 1677 | if ((*addr & cpu_to_be32(3)) == cpu_to_be32(0) || |
1678 | (*addr & cpu_to_be32(3)) == cpu_to_be32(3)) | ||
1681 | goto slarp_reply_out; | 1679 | goto slarp_reply_out; |
1682 | local = addr ^ 3; | 1680 | local = *addr ^ cpu_to_be32(3); |
1683 | printk(KERN_INFO "%s: got slarp reply: " | 1681 | printk(KERN_INFO "%s: got slarp reply: remote ip: %pI4, local ip: %pI4 mask: %pI4\n", |
1684 | "remote ip: %d.%d.%d.%d, " | 1682 | lp->netdev->dev->name, addr, &local, mask); |
1685 | "local ip: %d.%d.%d.%d " | ||
1686 | "mask: %d.%d.%d.%d\n", | ||
1687 | lp->netdev->dev->name, | ||
1688 | HIPQUAD(addr), | ||
1689 | HIPQUAD(local), | ||
1690 | HIPQUAD(mask)); | ||
1691 | break; | 1683 | break; |
1692 | slarp_reply_out: | 1684 | slarp_reply_out: |
1693 | printk(KERN_INFO "%s: got invalid slarp " | 1685 | printk(KERN_INFO "%s: got invalid slarp reply (%pI4/%pI4) - ignored\n", |
1694 | "reply (%d.%d.%d.%d/%d.%d.%d.%d) " | 1686 | lp->netdev->dev->name, addr, mask); |
1695 | "- ignored\n", lp->netdev->dev->name, | ||
1696 | HIPQUAD(addr), HIPQUAD(mask)); | ||
1697 | break; | 1687 | break; |
1698 | case CISCO_SLARP_KEEPALIVE: | 1688 | case CISCO_SLARP_KEEPALIVE: |
1699 | period = (int)((jiffies - lp->cisco_last_slarp_in | 1689 | period = (int)((jiffies - lp->cisco_last_slarp_in |
@@ -1707,9 +1697,10 @@ isdn_net_ciscohdlck_slarp_in(isdn_net_local *lp, struct sk_buff *skb) | |||
1707 | lp->cisco_keepalive_period); | 1697 | lp->cisco_keepalive_period); |
1708 | } | 1698 | } |
1709 | lp->cisco_last_slarp_in = jiffies; | 1699 | lp->cisco_last_slarp_in = jiffies; |
1710 | p += get_u32(p, &my_seq); | 1700 | my_seq = be32_to_cpup((__be32 *)(p + 0)); |
1711 | p += get_u32(p, &your_seq); | 1701 | your_seq = be32_to_cpup((__be32 *)(p + 4)); |
1712 | p += get_u16(p, &unused); | 1702 | unused = be16_to_cpup((__be16 *)(p + 8)); |
1703 | p += 10; | ||
1713 | lp->cisco_yourseq = my_seq; | 1704 | lp->cisco_yourseq = my_seq; |
1714 | lp->cisco_mineseen = your_seq; | 1705 | lp->cisco_mineseen = your_seq; |
1715 | break; | 1706 | break; |
@@ -1728,9 +1719,10 @@ isdn_net_ciscohdlck_receive(isdn_net_local *lp, struct sk_buff *skb) | |||
1728 | goto out_free; | 1719 | goto out_free; |
1729 | 1720 | ||
1730 | p = skb->data; | 1721 | p = skb->data; |
1731 | p += get_u8 (p, &addr); | 1722 | addr = *(u8 *)(p + 0); |
1732 | p += get_u8 (p, &ctrl); | 1723 | ctrl = *(u8 *)(p + 1); |
1733 | p += get_u16(p, &type); | 1724 | type = be16_to_cpup((__be16 *)(p + 2)); |
1725 | p += 4; | ||
1734 | skb_pull(skb, 4); | 1726 | skb_pull(skb, 4); |
1735 | 1727 | ||
1736 | if (addr != CISCO_ADDR_UNICAST && addr != CISCO_ADDR_BROADCAST) { | 1728 | if (addr != CISCO_ADDR_UNICAST && addr != CISCO_ADDR_BROADCAST) { |
@@ -1918,9 +1910,10 @@ static int isdn_net_header(struct sk_buff *skb, struct net_device *dev, | |||
1918 | case ISDN_NET_ENCAP_CISCOHDLC: | 1910 | case ISDN_NET_ENCAP_CISCOHDLC: |
1919 | case ISDN_NET_ENCAP_CISCOHDLCK: | 1911 | case ISDN_NET_ENCAP_CISCOHDLCK: |
1920 | p = skb_push(skb, 4); | 1912 | p = skb_push(skb, 4); |
1921 | p += put_u8 (p, CISCO_ADDR_UNICAST); | 1913 | *(u8 *)(p + 0) = CISCO_ADDR_UNICAST; |
1922 | p += put_u8 (p, CISCO_CTRL); | 1914 | *(u8 *)(p + 1) = CISCO_CTRL; |
1923 | p += put_u16(p, type); | 1915 | *(__be16 *)(p + 2) = cpu_to_be16(type); |
1916 | p += 4; | ||
1924 | len = 4; | 1917 | len = 4; |
1925 | break; | 1918 | break; |
1926 | #ifdef CONFIG_ISDN_X25 | 1919 | #ifdef CONFIG_ISDN_X25 |
diff --git a/drivers/isdn/i4l/isdn_net.h b/drivers/isdn/i4l/isdn_net.h index be4949715d55..2a6c370ea87f 100644 --- a/drivers/isdn/i4l/isdn_net.h +++ b/drivers/isdn/i4l/isdn_net.h | |||
@@ -145,46 +145,3 @@ static __inline__ void isdn_net_rm_from_bundle(isdn_net_local *lp) | |||
145 | spin_unlock_irqrestore(&master_lp->netdev->queue_lock, flags); | 145 | spin_unlock_irqrestore(&master_lp->netdev->queue_lock, flags); |
146 | } | 146 | } |
147 | 147 | ||
148 | static inline int | ||
149 | put_u8(unsigned char *p, u8 x) | ||
150 | { | ||
151 | *p = x; | ||
152 | return 1; | ||
153 | } | ||
154 | |||
155 | static inline int | ||
156 | put_u16(unsigned char *p, u16 x) | ||
157 | { | ||
158 | *((u16 *)p) = htons(x); | ||
159 | return 2; | ||
160 | } | ||
161 | |||
162 | static inline int | ||
163 | put_u32(unsigned char *p, u32 x) | ||
164 | { | ||
165 | *((u32 *)p) = htonl(x); | ||
166 | return 4; | ||
167 | } | ||
168 | |||
169 | static inline int | ||
170 | get_u8(unsigned char *p, u8 *x) | ||
171 | { | ||
172 | *x = *p; | ||
173 | return 1; | ||
174 | } | ||
175 | |||
176 | static inline int | ||
177 | get_u16(unsigned char *p, u16 *x) | ||
178 | { | ||
179 | *x = ntohs(*((u16 *)p)); | ||
180 | return 2; | ||
181 | } | ||
182 | |||
183 | static inline int | ||
184 | get_u32(unsigned char *p, u32 *x) | ||
185 | { | ||
186 | *x = ntohl(*((u32 *)p)); | ||
187 | return 4; | ||
188 | } | ||
189 | |||
190 | |||