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