18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* net/atm/atmarp.h - RFC1577 ATM ARP */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef _ATMCLIP_H 88c2ecf20Sopenharmony_ci#define _ATMCLIP_H 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/netdevice.h> 118c2ecf20Sopenharmony_ci#include <linux/atm.h> 128c2ecf20Sopenharmony_ci#include <linux/atmdev.h> 138c2ecf20Sopenharmony_ci#include <linux/atmarp.h> 148c2ecf20Sopenharmony_ci#include <linux/spinlock.h> 158c2ecf20Sopenharmony_ci#include <net/neighbour.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define CLIP_VCC(vcc) ((struct clip_vcc *) ((vcc)->user_back)) 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct sk_buff; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct clip_vcc { 238c2ecf20Sopenharmony_ci struct atm_vcc *vcc; /* VCC descriptor */ 248c2ecf20Sopenharmony_ci struct atmarp_entry *entry; /* ATMARP table entry, NULL if IP addr. 258c2ecf20Sopenharmony_ci isn't known yet */ 268c2ecf20Sopenharmony_ci int xoff; /* 1 if send buffer is full */ 278c2ecf20Sopenharmony_ci unsigned char encap; /* 0: NULL, 1: LLC/SNAP */ 288c2ecf20Sopenharmony_ci unsigned long last_use; /* last send or receive operation */ 298c2ecf20Sopenharmony_ci unsigned long idle_timeout; /* keep open idle for so many jiffies*/ 308c2ecf20Sopenharmony_ci void (*old_push)(struct atm_vcc *vcc,struct sk_buff *skb); 318c2ecf20Sopenharmony_ci /* keep old push fn for chaining */ 328c2ecf20Sopenharmony_ci void (*old_pop)(struct atm_vcc *vcc,struct sk_buff *skb); 338c2ecf20Sopenharmony_ci /* keep old pop fn for chaining */ 348c2ecf20Sopenharmony_ci struct clip_vcc *next; /* next VCC */ 358c2ecf20Sopenharmony_ci}; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_cistruct atmarp_entry { 398c2ecf20Sopenharmony_ci struct clip_vcc *vccs; /* active VCCs; NULL if resolution is 408c2ecf20Sopenharmony_ci pending */ 418c2ecf20Sopenharmony_ci unsigned long expires; /* entry expiration time */ 428c2ecf20Sopenharmony_ci struct neighbour *neigh; /* neighbour back-pointer */ 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci#define PRIV(dev) ((struct clip_priv *) netdev_priv(dev)) 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistruct clip_priv { 488c2ecf20Sopenharmony_ci int number; /* for convenience ... */ 498c2ecf20Sopenharmony_ci spinlock_t xoff_lock; /* ensures that pop is atomic (SMP) */ 508c2ecf20Sopenharmony_ci struct net_device *next; /* next CLIP interface */ 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#endif 54