cregit-Linux how code gets into the kernel

Release 4.14 net/atm/pvc.c

Directory: net/atm
// SPDX-License-Identifier: GPL-2.0
/* net/atm/pvc.c - ATM PVC sockets */

/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */


#include <linux/net.h>		/* struct socket, struct proto_ops */
#include <linux/atm.h>		/* ATM stuff */
#include <linux/atmdev.h>	/* ATM devices */
#include <linux/errno.h>	/* error codes */
#include <linux/kernel.h>	/* printk */
#include <linux/init.h>
#include <linux/skbuff.h>
#include <linux/bitops.h>
#include <linux/export.h>
#include <net/sock.h>		/* for sock_no_* */

#include "resources.h"		/* devs and vccs */
#include "common.h"		/* common for PVCs and SVCs */



static int pvc_shutdown(struct socket *sock, int how) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)17100.00%1100.00%
Total17100.00%1100.00%


static int pvc_bind(struct socket *sock, struct sockaddr *sockaddr, int sockaddr_len) { struct sock *sk = sock->sk; struct sockaddr_atmpvc *addr; struct atm_vcc *vcc; int error; if (sockaddr_len != sizeof(struct sockaddr_atmpvc)) return -EINVAL; addr = (struct sockaddr_atmpvc *)sockaddr; if (addr->sap_family != AF_ATMPVC) return -EAFNOSUPPORT; lock_sock(sk); vcc = ATM_SD(sock); if (!test_bit(ATM_VF_HASQOS, &vcc->flags)) { error = -EBADFD; goto out; } if (test_bit(ATM_VF_PARTIAL, &vcc->flags)) { if (vcc->vpi != ATM_VPI_UNSPEC) addr->sap_addr.vpi = vcc->vpi; if (vcc->vci != ATM_VCI_UNSPEC) addr->sap_addr.vci = vcc->vci; } error = vcc_connect(sock, addr->sap_addr.itf, addr->sap_addr.vpi, addr->sap_addr.vci); out: release_sock(sk); return error; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)15880.61%266.67%
Chas Williams3819.39%133.33%
Total196100.00%3100.00%


static int pvc_connect(struct socket *sock, struct sockaddr *sockaddr, int sockaddr_len, int flags) { return pvc_bind(sock, sockaddr, sockaddr_len); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)32100.00%1100.00%
Total32100.00%1100.00%


static int pvc_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) { struct sock *sk = sock->sk; int error; lock_sock(sk); error = vcc_setsockopt(sock, level, optname, optval, optlen); release_sock(sk); return error; }

Contributors

PersonTokensPropCommitsCommitProp
Chas Williams6496.97%133.33%
Al Viro11.52%133.33%
David S. Miller11.52%133.33%
Total66100.00%3100.00%


static int pvc_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) { struct sock *sk = sock->sk; int error; lock_sock(sk); error = vcc_getsockopt(sock, level, optname, optval, optlen); release_sock(sk); return error; }

Contributors

PersonTokensPropCommitsCommitProp
Chas Williams6597.01%150.00%
Al Viro22.99%150.00%
Total67100.00%2100.00%


static int pvc_getname(struct socket *sock, struct sockaddr *sockaddr, int *sockaddr_len, int peer) { struct sockaddr_atmpvc *addr; struct atm_vcc *vcc = ATM_SD(sock); if (!vcc->dev || !test_bit(ATM_VF_ADDR, &vcc->flags)) return -ENOTCONN; *sockaddr_len = sizeof(struct sockaddr_atmpvc); addr = (struct sockaddr_atmpvc *)sockaddr; memset(addr, 0, sizeof(*addr)); addr->sap_family = AF_ATMPVC; addr->sap_addr.itf = vcc->dev->number; addr->sap_addr.vpi = vcc->vpi; addr->sap_addr.vci = vcc->vci; return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)11990.15%375.00%
Mathias Krause139.85%125.00%
Total132100.00%4100.00%

static const struct proto_ops pvc_proto_ops = { .family = PF_ATMPVC, .owner = THIS_MODULE, .release = vcc_release, .bind = pvc_bind, .connect = pvc_connect, .socketpair = sock_no_socketpair, .accept = sock_no_accept, .getname = pvc_getname, .poll = vcc_poll, .ioctl = vcc_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = vcc_compat_ioctl, #endif .listen = sock_no_listen, .shutdown = pvc_shutdown, .setsockopt = pvc_setsockopt, .getsockopt = pvc_getsockopt, .sendmsg = vcc_sendmsg, .recvmsg = vcc_recvmsg, .mmap = sock_no_mmap, .sendpage = sock_no_sendpage, };
static int pvc_create(struct net *net, struct socket *sock, int protocol, int kern) { if (net != &init_net) return -EAFNOSUPPORT; sock->ops = &pvc_proto_ops; return vcc_create(net, sock, protocol, PF_ATMPVC, kern); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)3055.56%120.00%
Eric W. Biedermann2037.04%240.00%
Eric Paris35.56%120.00%
Chas Williams11.85%120.00%
Total54100.00%5100.00%

static const struct net_proto_family pvc_family_ops = { .family = PF_ATMPVC, .create = pvc_create, .owner = THIS_MODULE, }; /* * Initialize the ATM PVC protocol family */
int __init atmpvc_init(void) { return sock_register(&pvc_family_ops); }

Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)1493.33%375.00%
Chas Williams16.67%125.00%
Total15100.00%4100.00%


void atmpvc_exit(void) { sock_unregister(PF_ATMPVC); }

Contributors

PersonTokensPropCommitsCommitProp
Chas Williams975.00%150.00%
Linus Torvalds (pre-git)325.00%150.00%
Total12100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Linus Torvalds (pre-git)43456.36%623.08%
Chas Williams26133.90%623.08%
Eric W. Biedermann202.60%27.69%
Rusty Russell151.95%13.85%
Mathias Krause131.69%13.85%
David Woodhouse101.30%13.85%
David S. Miller40.52%27.69%
Paul Gortmaker30.39%13.85%
Al Viro30.39%13.85%
Eric Paris30.39%13.85%
Eric Dumazet10.13%13.85%
Arnaldo Carvalho de Melo10.13%13.85%
Greg Kroah-Hartman10.13%13.85%
Stephen Hemminger10.13%13.85%
Total770100.00%26100.00%
Directory: net/atm
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.