diff options
| -rw-r--r-- | drivers/net/ppp_generic.c | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index 4dc5b4b7a561..d3207c0da895 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
| @@ -123,7 +123,6 @@ struct ppp { | |||
| 123 | u32 minseq; /* MP: min of most recent seqnos */ | 123 | u32 minseq; /* MP: min of most recent seqnos */ |
| 124 | struct sk_buff_head mrq; /* MP: receive reconstruction queue */ | 124 | struct sk_buff_head mrq; /* MP: receive reconstruction queue */ |
| 125 | #endif /* CONFIG_PPP_MULTILINK */ | 125 | #endif /* CONFIG_PPP_MULTILINK */ |
| 126 | struct net_device_stats stats; /* statistics */ | ||
| 127 | #ifdef CONFIG_PPP_FILTER | 126 | #ifdef CONFIG_PPP_FILTER |
| 128 | struct sock_filter *pass_filter; /* filter for packets to pass */ | 127 | struct sock_filter *pass_filter; /* filter for packets to pass */ |
| 129 | struct sock_filter *active_filter;/* filter for pkts to reset idle */ | 128 | struct sock_filter *active_filter;/* filter for pkts to reset idle */ |
| @@ -914,18 +913,10 @@ ppp_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 914 | 913 | ||
| 915 | outf: | 914 | outf: |
| 916 | kfree_skb(skb); | 915 | kfree_skb(skb); |
| 917 | ++ppp->stats.tx_dropped; | 916 | ++ppp->dev->stats.tx_dropped; |
| 918 | return 0; | 917 | return 0; |
| 919 | } | 918 | } |
| 920 | 919 | ||
| 921 | static struct net_device_stats * | ||
| 922 | ppp_net_stats(struct net_device *dev) | ||
| 923 | { | ||
| 924 | struct ppp *ppp = (struct ppp *) dev->priv; | ||
| 925 | |||
| 926 | return &ppp->stats; | ||
| 927 | } | ||
| 928 | |||
| 929 | static int | 920 | static int |
| 930 | ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 921 | ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
| 931 | { | 922 | { |
| @@ -1095,8 +1086,8 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) | |||
| 1095 | #endif /* CONFIG_PPP_FILTER */ | 1086 | #endif /* CONFIG_PPP_FILTER */ |
| 1096 | } | 1087 | } |
| 1097 | 1088 | ||
| 1098 | ++ppp->stats.tx_packets; | 1089 | ++ppp->dev->stats.tx_packets; |
| 1099 | ppp->stats.tx_bytes += skb->len - 2; | 1090 | ppp->dev->stats.tx_bytes += skb->len - 2; |
| 1100 | 1091 | ||
| 1101 | switch (proto) { | 1092 | switch (proto) { |
| 1102 | case PPP_IP: | 1093 | case PPP_IP: |
| @@ -1171,7 +1162,7 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb) | |||
| 1171 | drop: | 1162 | drop: |
| 1172 | if (skb) | 1163 | if (skb) |
| 1173 | kfree_skb(skb); | 1164 | kfree_skb(skb); |
| 1174 | ++ppp->stats.tx_errors; | 1165 | ++ppp->dev->stats.tx_errors; |
| 1175 | } | 1166 | } |
| 1176 | 1167 | ||
| 1177 | /* | 1168 | /* |
| @@ -1409,7 +1400,7 @@ static int ppp_mp_explode(struct ppp *ppp, struct sk_buff *skb) | |||
| 1409 | spin_unlock_bh(&pch->downl); | 1400 | spin_unlock_bh(&pch->downl); |
| 1410 | if (ppp->debug & 1) | 1401 | if (ppp->debug & 1) |
| 1411 | printk(KERN_ERR "PPP: no memory (fragment)\n"); | 1402 | printk(KERN_ERR "PPP: no memory (fragment)\n"); |
| 1412 | ++ppp->stats.tx_errors; | 1403 | ++ppp->dev->stats.tx_errors; |
| 1413 | ++ppp->nxseq; | 1404 | ++ppp->nxseq; |
| 1414 | return 1; /* abandon the frame */ | 1405 | return 1; /* abandon the frame */ |
| 1415 | } | 1406 | } |
| @@ -1538,7 +1529,7 @@ ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch) | |||
| 1538 | 1529 | ||
| 1539 | if (skb->len > 0) | 1530 | if (skb->len > 0) |
| 1540 | /* note: a 0-length skb is used as an error indication */ | 1531 | /* note: a 0-length skb is used as an error indication */ |
| 1541 | ++ppp->stats.rx_length_errors; | 1532 | ++ppp->dev->stats.rx_length_errors; |
| 1542 | 1533 | ||
| 1543 | kfree_skb(skb); | 1534 | kfree_skb(skb); |
| 1544 | ppp_receive_error(ppp); | 1535 | ppp_receive_error(ppp); |
| @@ -1547,7 +1538,7 @@ ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch) | |||
| 1547 | static void | 1538 | static void |
| 1548 | ppp_receive_error(struct ppp *ppp) | 1539 | ppp_receive_error(struct ppp *ppp) |
| 1549 | { | 1540 | { |
| 1550 | ++ppp->stats.rx_errors; | 1541 | ++ppp->dev->stats.rx_errors; |
| 1551 | if (ppp->vj) | 1542 | if (ppp->vj) |
| 1552 | slhc_toss(ppp->vj); | 1543 | slhc_toss(ppp->vj); |
| 1553 | } | 1544 | } |
| @@ -1627,8 +1618,8 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) | |||
| 1627 | break; | 1618 | break; |
| 1628 | } | 1619 | } |
| 1629 | 1620 | ||
| 1630 | ++ppp->stats.rx_packets; | 1621 | ++ppp->dev->stats.rx_packets; |
| 1631 | ppp->stats.rx_bytes += skb->len - 2; | 1622 | ppp->dev->stats.rx_bytes += skb->len - 2; |
| 1632 | 1623 | ||
| 1633 | npi = proto_to_npindex(proto); | 1624 | npi = proto_to_npindex(proto); |
| 1634 | if (npi < 0) { | 1625 | if (npi < 0) { |
| @@ -1806,7 +1797,7 @@ ppp_receive_mp_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch) | |||
| 1806 | */ | 1797 | */ |
| 1807 | if (seq_before(seq, ppp->nextseq)) { | 1798 | if (seq_before(seq, ppp->nextseq)) { |
| 1808 | kfree_skb(skb); | 1799 | kfree_skb(skb); |
| 1809 | ++ppp->stats.rx_dropped; | 1800 | ++ppp->dev->stats.rx_dropped; |
| 1810 | ppp_receive_error(ppp); | 1801 | ppp_receive_error(ppp); |
| 1811 | return; | 1802 | return; |
| 1812 | } | 1803 | } |
| @@ -1928,7 +1919,7 @@ ppp_mp_reconstruct(struct ppp *ppp) | |||
| 1928 | /* Got a complete packet yet? */ | 1919 | /* Got a complete packet yet? */ |
| 1929 | if (lost == 0 && (p->BEbits & E) && (head->BEbits & B)) { | 1920 | if (lost == 0 && (p->BEbits & E) && (head->BEbits & B)) { |
| 1930 | if (len > ppp->mrru + 2) { | 1921 | if (len > ppp->mrru + 2) { |
| 1931 | ++ppp->stats.rx_length_errors; | 1922 | ++ppp->dev->stats.rx_length_errors; |
| 1932 | printk(KERN_DEBUG "PPP: reconstructed packet" | 1923 | printk(KERN_DEBUG "PPP: reconstructed packet" |
| 1933 | " is too long (%d)\n", len); | 1924 | " is too long (%d)\n", len); |
| 1934 | } else if (p == head) { | 1925 | } else if (p == head) { |
| @@ -1937,7 +1928,7 @@ ppp_mp_reconstruct(struct ppp *ppp) | |||
| 1937 | skb = skb_get(p); | 1928 | skb = skb_get(p); |
| 1938 | break; | 1929 | break; |
| 1939 | } else if ((skb = dev_alloc_skb(len)) == NULL) { | 1930 | } else if ((skb = dev_alloc_skb(len)) == NULL) { |
| 1940 | ++ppp->stats.rx_missed_errors; | 1931 | ++ppp->dev->stats.rx_missed_errors; |
| 1941 | printk(KERN_DEBUG "PPP: no memory for " | 1932 | printk(KERN_DEBUG "PPP: no memory for " |
| 1942 | "reconstructed packet"); | 1933 | "reconstructed packet"); |
| 1943 | } else { | 1934 | } else { |
| @@ -1966,7 +1957,7 @@ ppp_mp_reconstruct(struct ppp *ppp) | |||
| 1966 | if (ppp->debug & 1) | 1957 | if (ppp->debug & 1) |
| 1967 | printk(KERN_DEBUG " missed pkts %u..%u\n", | 1958 | printk(KERN_DEBUG " missed pkts %u..%u\n", |
| 1968 | ppp->nextseq, head->sequence-1); | 1959 | ppp->nextseq, head->sequence-1); |
| 1969 | ++ppp->stats.rx_dropped; | 1960 | ++ppp->dev->stats.rx_dropped; |
| 1970 | ppp_receive_error(ppp); | 1961 | ppp_receive_error(ppp); |
| 1971 | } | 1962 | } |
| 1972 | 1963 | ||
| @@ -2377,12 +2368,12 @@ ppp_get_stats(struct ppp *ppp, struct ppp_stats *st) | |||
| 2377 | struct slcompress *vj = ppp->vj; | 2368 | struct slcompress *vj = ppp->vj; |
| 2378 | 2369 | ||
| 2379 | memset(st, 0, sizeof(*st)); | 2370 | memset(st, 0, sizeof(*st)); |
| 2380 | st->p.ppp_ipackets = ppp->stats.rx_packets; | 2371 | st->p.ppp_ipackets = ppp->dev->stats.rx_packets; |
| 2381 | st->p.ppp_ierrors = ppp->stats.rx_errors; | 2372 | st->p.ppp_ierrors = ppp->dev->stats.rx_errors; |
| 2382 | st->p.ppp_ibytes = ppp->stats.rx_bytes; | 2373 | st->p.ppp_ibytes = ppp->dev->stats.rx_bytes; |
| 2383 | st->p.ppp_opackets = ppp->stats.tx_packets; | 2374 | st->p.ppp_opackets = ppp->dev->stats.tx_packets; |
| 2384 | st->p.ppp_oerrors = ppp->stats.tx_errors; | 2375 | st->p.ppp_oerrors = ppp->dev->stats.tx_errors; |
| 2385 | st->p.ppp_obytes = ppp->stats.tx_bytes; | 2376 | st->p.ppp_obytes = ppp->dev->stats.tx_bytes; |
| 2386 | if (!vj) | 2377 | if (!vj) |
| 2387 | return; | 2378 | return; |
| 2388 | st->vj.vjs_packets = vj->sls_o_compressed + vj->sls_o_uncompressed; | 2379 | st->vj.vjs_packets = vj->sls_o_compressed + vj->sls_o_uncompressed; |
| @@ -2436,7 +2427,6 @@ ppp_create_interface(int unit, int *retp) | |||
| 2436 | dev->priv = ppp; | 2427 | dev->priv = ppp; |
| 2437 | 2428 | ||
| 2438 | dev->hard_start_xmit = ppp_start_xmit; | 2429 | dev->hard_start_xmit = ppp_start_xmit; |
| 2439 | dev->get_stats = ppp_net_stats; | ||
| 2440 | dev->do_ioctl = ppp_net_ioctl; | 2430 | dev->do_ioctl = ppp_net_ioctl; |
| 2441 | 2431 | ||
| 2442 | ret = -EEXIST; | 2432 | ret = -EEXIST; |
