Lines Matching +full:master +full:- +full:stats
1 // SPDX-License-Identifier: GPL-2.0-or-later
21 * sent back to Linux for re-transmission
108 dev->stats.rx_errors++; in dlci_receive()
113 hdr = (struct frhdr *) skb->data; in dlci_receive()
116 skb->dev = dev; in dlci_receive()
118 if (hdr->control != FRAD_I_UI) in dlci_receive()
121 hdr->control); in dlci_receive()
122 dev->stats.rx_errors++; in dlci_receive()
125 switch (hdr->IP_NLPID) in dlci_receive()
128 if (hdr->NLPID != FRAD_P_SNAP) in dlci_receive()
131 hdr->NLPID); in dlci_receive()
132 dev->stats.rx_errors++; in dlci_receive()
136 if (hdr->OUI[0] + hdr->OUI[1] + hdr->OUI[2] != 0) in dlci_receive()
138 netdev_notice(dev, "Unsupported organizationally unique identifier 0x%02X-%02X-%02X\n", in dlci_receive()
139 hdr->OUI[0], in dlci_receive()
140 hdr->OUI[1], in dlci_receive()
141 hdr->OUI[2]); in dlci_receive()
142 dev->stats.rx_errors++; in dlci_receive()
149 skb->protocol = hdr->PID; in dlci_receive()
154 header = sizeof(hdr->control) + sizeof(hdr->IP_NLPID); in dlci_receive()
155 skb->protocol = htons(ETH_P_IP); in dlci_receive()
163 hdr->pad); in dlci_receive()
164 dev->stats.rx_errors++; in dlci_receive()
169 hdr->pad); in dlci_receive()
170 dev->stats.rx_errors++; in dlci_receive()
179 dev->stats.rx_bytes += skb->len; in dlci_receive()
181 dev->stats.rx_packets++; in dlci_receive()
193 netdev_start_xmit(skb, dlp->slave, txq, false); in dlci_transmit()
207 flp = netdev_priv(dlp->slave); in dlci_config()
212 return -EFAULT; in dlci_config()
214 return -EINVAL; in dlci_config()
215 memcpy(&dlp->config, &config, sizeof(struct dlci_conf)); in dlci_config()
216 dlp->configured = 1; in dlci_config()
219 err = (*flp->dlci_conf)(dlp->slave, dev, get); in dlci_config()
225 if (copy_to_user(conf, &dlp->config, sizeof(struct dlci_conf))) in dlci_config()
226 return -EFAULT; in dlci_config()
237 return -EPERM; in dlci_dev_ioctl()
244 if (!*(short *)(dev->dev_addr)) in dlci_dev_ioctl()
245 return -EINVAL; in dlci_dev_ioctl()
247 strncpy(ifr->ifr_slave, dlp->slave->name, sizeof(ifr->ifr_slave)); in dlci_dev_ioctl()
252 if (!*(short *)(dev->dev_addr)) in dlci_dev_ioctl()
253 return -EINVAL; in dlci_dev_ioctl()
255 return dlci_config(dev, ifr->ifr_data, cmd == DLCI_GET_CONF); in dlci_dev_ioctl()
258 return -EOPNOTSUPP; in dlci_dev_ioctl()
267 return dev_set_mtu(dlp->slave, new_mtu); in dlci_change_mtu()
278 if (!*(short *)(dev->dev_addr)) in dlci_open()
279 return -EINVAL; in dlci_open()
281 if (!netif_running(dlp->slave)) in dlci_open()
282 return -ENOTCONN; in dlci_open()
284 flp = netdev_priv(dlp->slave); in dlci_open()
285 err = (*flp->activate)(dlp->slave, dev); in dlci_open()
303 flp = netdev_priv(dlp->slave); in dlci_close()
304 (*flp->deactivate)(dlp->slave, dev); in dlci_close()
311 struct net_device *master, *slave; in dlci_add() local
314 int err = -EINVAL; in dlci_add()
318 slave = dev_get_by_name(&init_net, dlci->devname); in dlci_add()
320 return -ENODEV; in dlci_add()
322 if (slave->type != ARPHRD_FRAD || netdev_priv(slave) == NULL) in dlci_add()
326 master = alloc_netdev(sizeof(struct dlci_local), "dlci%d", in dlci_add()
328 if (!master) { in dlci_add()
329 err = -ENOMEM; in dlci_add()
336 if (dlp->slave == slave) { in dlci_add()
337 err = -EBUSY; in dlci_add()
342 *(short *)(master->dev_addr) = dlci->dlci; in dlci_add()
344 dlp = netdev_priv(master); in dlci_add()
345 dlp->slave = slave; in dlci_add()
346 dlp->master = master; in dlci_add()
349 err = (*flp->assoc)(slave, master); in dlci_add()
353 err = register_netdevice(master); in dlci_add()
357 strcpy(dlci->devname, master->name); in dlci_add()
359 list_add(&dlp->list, &dlci_devs); in dlci_add()
366 free_netdev(master); in dlci_add()
376 struct net_device *master, *slave; in dlci_del() local
383 master = __dev_get_by_name(&init_net, dlci->devname); in dlci_del()
384 if (!master) { in dlci_del()
385 err = -ENODEV; in dlci_del()
390 if (dlp->master == master) { in dlci_del()
396 err = -ENODEV; in dlci_del()
400 if (netif_running(master)) { in dlci_del()
401 err = -EBUSY; in dlci_del()
405 dlp = netdev_priv(master); in dlci_del()
406 slave = dlp->slave; in dlci_del()
409 err = (*flp->deassoc)(slave, master); in dlci_del()
411 list_del(&dlp->list); in dlci_del()
413 unregister_netdevice(master); in dlci_del()
428 return -EPERM; in dlci_ioctl()
431 return -EFAULT; in dlci_ioctl()
440 return -EFAULT; in dlci_ioctl()
448 err = -EINVAL; in dlci_ioctl()
470 dev->flags = 0; in dlci_setup()
471 dev->header_ops = &dlci_header_ops; in dlci_setup()
472 dev->netdev_ops = &dlci_netdev_ops; in dlci_setup()
473 dev->needs_free_netdev = true; in dlci_setup()
475 dlp->receive = dlci_receive; in dlci_setup()
477 dev->type = ARPHRD_DLCI; in dlci_setup()
478 dev->hard_header_len = sizeof(struct frhdr); in dlci_setup()
479 dev->addr_len = sizeof(short); in dlci_setup()
483 /* if slave is unregistering, then cleanup master */
496 if (dlp->slave == dev) { in dlci_dev_event()
497 list_del(&dlp->list); in dlci_dev_event()
498 unregister_netdevice(dlp->master); in dlci_dev_event()
499 dev_put(dlp->slave); in dlci_dev_event()
530 unregister_netdevice(dlp->master); in dlci_exit()
531 dev_put(dlp->slave); in dlci_exit()