Lines Matching +full:- +full:gp
1 // SPDX-License-Identifier: GPL-2.0-only
3 * File: pep-gprs.c
9 * Author: Rémi Denis-Courmont
53 static void gprs_writeable(struct gprs_dev *gp) in gprs_writeable() argument
55 struct net_device *dev = gp->dev; in gprs_writeable()
57 if (pep_writeable(gp->sk)) in gprs_writeable()
67 struct gprs_dev *gp = sk->sk_user_data; in gprs_state_change() local
69 if (sk->sk_state == TCP_CLOSE_WAIT) { in gprs_state_change()
70 struct net_device *dev = gp->dev; in gprs_state_change()
77 static int gprs_recv(struct gprs_dev *gp, struct sk_buff *skb) in gprs_recv() argument
79 struct net_device *dev = gp->dev; in gprs_recv()
84 err = -EINVAL; in gprs_recv()
93 * so wrap the IP packet as a single fragment of an head-less in gprs_recv()
98 err = -ENOBUFS; in gprs_recv()
101 skb_shinfo(rskb)->frag_list = skb; in gprs_recv()
102 rskb->len += skb->len; in gprs_recv()
103 rskb->data_len += rskb->len; in gprs_recv()
104 rskb->truesize += rskb->len; in gprs_recv()
108 flen += fs->len; in gprs_recv()
109 skb->next = skb_shinfo(skb)->frag_list; in gprs_recv()
111 skb->len -= flen; in gprs_recv()
112 skb->data_len -= flen; in gprs_recv()
113 skb->truesize -= flen; in gprs_recv()
118 skb->protocol = protocol; in gprs_recv()
120 skb->dev = dev; in gprs_recv()
122 if (likely(dev->flags & IFF_UP)) { in gprs_recv()
123 dev->stats.rx_packets++; in gprs_recv()
124 dev->stats.rx_bytes += skb->len; in gprs_recv()
128 err = -ENODEV; in gprs_recv()
133 dev->stats.rx_dropped++; in gprs_recv()
140 struct gprs_dev *gp = sk->sk_user_data; in gprs_data_ready() local
147 gprs_recv(gp, skb); in gprs_data_ready()
153 struct gprs_dev *gp = sk->sk_user_data; in gprs_write_space() local
155 if (netif_running(gp->dev)) in gprs_write_space()
156 gprs_writeable(gp); in gprs_write_space()
165 struct gprs_dev *gp = netdev_priv(dev); in gprs_open() local
167 gprs_writeable(gp); in gprs_open()
179 struct gprs_dev *gp = netdev_priv(dev); in gprs_xmit() local
180 struct sock *sk = gp->sk; in gprs_xmit()
183 switch (skb->protocol) { in gprs_xmit()
194 len = skb->len; in gprs_xmit()
197 net_dbg_ratelimited("%s: TX error (%d)\n", dev->name, err); in gprs_xmit()
198 dev->stats.tx_aborted_errors++; in gprs_xmit()
199 dev->stats.tx_errors++; in gprs_xmit()
201 dev->stats.tx_packets++; in gprs_xmit()
202 dev->stats.tx_bytes += len; in gprs_xmit()
219 dev->features = NETIF_F_FRAGLIST; in gprs_setup()
220 dev->type = ARPHRD_PHONET_PIPE; in gprs_setup()
221 dev->flags = IFF_POINTOPOINT | IFF_NOARP; in gprs_setup()
222 dev->mtu = GPRS_DEFAULT_MTU; in gprs_setup()
223 dev->min_mtu = 576; in gprs_setup()
224 dev->max_mtu = (PHONET_MAX_MTU - 11); in gprs_setup()
225 dev->hard_header_len = 0; in gprs_setup()
226 dev->addr_len = 0; in gprs_setup()
227 dev->tx_queue_len = 10; in gprs_setup()
229 dev->netdev_ops = &gprs_netdev_ops; in gprs_setup()
230 dev->needs_free_netdev = true; in gprs_setup()
244 struct gprs_dev *gp; in gprs_attach() local
248 if (unlikely(sk->sk_type == SOCK_STREAM)) in gprs_attach()
249 return -EINVAL; /* need packet boundaries */ in gprs_attach()
252 dev = alloc_netdev(sizeof(*gp), ifname, NET_NAME_UNKNOWN, gprs_setup); in gprs_attach()
254 return -ENOMEM; in gprs_attach()
255 gp = netdev_priv(dev); in gprs_attach()
256 gp->sk = sk; in gprs_attach()
257 gp->dev = dev; in gprs_attach()
267 if (unlikely(sk->sk_user_data)) { in gprs_attach()
268 err = -EBUSY; in gprs_attach()
271 if (unlikely((1 << sk->sk_state & (TCPF_CLOSE|TCPF_LISTEN)) || in gprs_attach()
273 err = -EINVAL; in gprs_attach()
276 sk->sk_user_data = gp; in gprs_attach()
277 gp->old_state_change = sk->sk_state_change; in gprs_attach()
278 gp->old_data_ready = sk->sk_data_ready; in gprs_attach()
279 gp->old_write_space = sk->sk_write_space; in gprs_attach()
280 sk->sk_state_change = gprs_state_change; in gprs_attach()
281 sk->sk_data_ready = gprs_data_ready; in gprs_attach()
282 sk->sk_write_space = gprs_write_space; in gprs_attach()
286 printk(KERN_DEBUG"%s: attached\n", dev->name); in gprs_attach()
287 return dev->ifindex; in gprs_attach()
297 struct gprs_dev *gp = sk->sk_user_data; in gprs_detach() local
298 struct net_device *dev = gp->dev; in gprs_detach()
301 sk->sk_user_data = NULL; in gprs_detach()
302 sk->sk_state_change = gp->old_state_change; in gprs_detach()
303 sk->sk_data_ready = gp->old_data_ready; in gprs_detach()
304 sk->sk_write_space = gp->old_write_space; in gprs_detach()
307 printk(KERN_DEBUG"%s: detached\n", dev->name); in gprs_detach()