#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/kmod.h>
#include <linux/net.h>
#include <linux/atm.h>
#include <linux/atmdev.h>
#include <linux/socket.h>
#include <linux/errno.h>
#include <linux/capability.h>
#include <linux/mm.h>
#include <linux/sched/signal.h>
#include <linux/time64.h>
#include <linux/skbuff.h>
#include <linux/bitops.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <net/sock.h>
#include <linux/uaccess.h>
#include <linux/poll.h>
#include <linux/atomic.h>
#include "resources.h"
#include "common.h"
#include "protocols.h"
#include "addr.h"
#include "signaling.h"
struct hlist_head vcc_hash[VCC_HTABLE_SIZE];
EXPORT_SYMBOL(…);
DEFINE_RWLOCK(…);
EXPORT_SYMBOL(…);
static ATOMIC_NOTIFIER_HEAD(atm_dev_notify_chain);
static void __vcc_insert_socket(struct sock *sk)
{ … }
void vcc_insert_socket(struct sock *sk)
{ … }
EXPORT_SYMBOL(…);
static void vcc_remove_socket(struct sock *sk)
{ … }
static bool vcc_tx_ready(struct atm_vcc *vcc, unsigned int size)
{ … }
static void vcc_sock_destruct(struct sock *sk)
{ … }
static void vcc_def_wakeup(struct sock *sk)
{ … }
static inline int vcc_writable(struct sock *sk)
{ … }
static void vcc_write_space(struct sock *sk)
{ … }
static void vcc_release_cb(struct sock *sk)
{ … }
static struct proto vcc_proto = …;
int vcc_create(struct net *net, struct socket *sock, int protocol, int family, int kern)
{ … }
static void vcc_destroy_socket(struct sock *sk)
{ … }
int vcc_release(struct socket *sock)
{ … }
void vcc_release_async(struct atm_vcc *vcc, int reply)
{ … }
EXPORT_SYMBOL(…);
void vcc_process_recv_queue(struct atm_vcc *vcc)
{ … }
EXPORT_SYMBOL(…);
void atm_dev_signal_change(struct atm_dev *dev, char signal)
{ … }
EXPORT_SYMBOL(…);
void atm_dev_release_vccs(struct atm_dev *dev)
{ … }
EXPORT_SYMBOL(…);
static int adjust_tp(struct atm_trafprm *tp, unsigned char aal)
{ … }
static int check_ci(const struct atm_vcc *vcc, short vpi, int vci)
{ … }
static int find_ci(const struct atm_vcc *vcc, short *vpi, int *vci)
{ … }
static int __vcc_connect(struct atm_vcc *vcc, struct atm_dev *dev, short vpi,
int vci)
{ … }
int vcc_connect(struct socket *sock, int itf, short vpi, int vci)
{ … }
int vcc_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
int flags)
{ … }
int vcc_sendmsg(struct socket *sock, struct msghdr *m, size_t size)
{ … }
__poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait)
{ … }
static int atm_change_qos(struct atm_vcc *vcc, struct atm_qos *qos)
{ … }
static int check_tp(const struct atm_trafprm *tp)
{ … }
static int check_qos(const struct atm_qos *qos)
{ … }
int vcc_setsockopt(struct socket *sock, int level, int optname,
sockptr_t optval, unsigned int optlen)
{ … }
int vcc_getsockopt(struct socket *sock, int level, int optname,
char __user *optval, int __user *optlen)
{ … }
int register_atmdevice_notifier(struct notifier_block *nb)
{ … }
EXPORT_SYMBOL_GPL(…);
void unregister_atmdevice_notifier(struct notifier_block *nb)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __init atm_init(void)
{ … }
static void __exit atm_exit(void)
{ … }
subsys_initcall(atm_init);
module_exit(atm_exit);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
MODULE_ALIAS_NETPROTO(…);
MODULE_ALIAS_NETPROTO(…);