patch-2.4.23 linux-2.4.23/net/atm/pvc.c
Next file: linux-2.4.23/net/atm/resources.c
Previous file: linux-2.4.23/net/atm/proc.c
Back to the patch index
Back to the overall index
- Lines: 132
- Date:
2003-11-28 10:26:21.000000000 -0800
- Orig file:
linux-2.4.22/net/atm/pvc.c
- Orig date:
2003-08-25 04:44:44.000000000 -0700
diff -urN linux-2.4.22/net/atm/pvc.c linux-2.4.23/net/atm/pvc.c
@@ -18,10 +18,6 @@
#include "resources.h" /* devs and vccs */
#include "common.h" /* common for PVCs and SVCs */
-#ifndef NULL
-#define NULL 0
-#endif
-
static int pvc_shutdown(struct socket *sock,int how)
{
@@ -32,20 +28,29 @@
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)) return -EBADFD;
+ 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;
}
- return atm_connect(sock,addr->sap_addr.itf,addr->sap_addr.vpi,
- addr->sap_addr.vci);
+ error = vcc_connect(sock, addr->sap_addr.itf, addr->sap_addr.vpi,
+ addr->sap_addr.vci);
+out:
+ release_sock(sk);
+ return error;
}
@@ -55,6 +60,31 @@
return pvc_bind(sock,sockaddr,sockaddr_len);
}
+static int pvc_setsockopt(struct socket *sock, int level, int optname,
+ char *optval, 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;
+}
+
+
+static int pvc_getsockopt(struct socket *sock, int level, int optname,
+ char *optval, int *optlen)
+{
+ struct sock *sk = sock->sk;
+ int error;
+
+ lock_sock(sk);
+ error = vcc_getsockopt(sock, level, optname, optval, optlen);
+ release_sock(sk);
+ return error;
+}
+
static int pvc_getname(struct socket *sock,struct sockaddr *sockaddr,
int *sockaddr_len,int peer)
@@ -73,36 +103,32 @@
}
-static struct proto_ops SOCKOPS_WRAPPED(pvc_proto_ops) = {
- family: PF_ATMPVC,
+static struct proto_ops pvc_proto_ops = {
+ .family = PF_ATMPVC,
- release: atm_release,
- bind: pvc_bind,
- connect: pvc_connect,
- socketpair: sock_no_socketpair,
- accept: sock_no_accept,
- getname: pvc_getname,
- poll: atm_poll,
- ioctl: atm_ioctl,
- listen: sock_no_listen,
- shutdown: pvc_shutdown,
- setsockopt: atm_setsockopt,
- getsockopt: atm_getsockopt,
- sendmsg: atm_sendmsg,
- recvmsg: atm_recvmsg,
- mmap: sock_no_mmap,
- sendpage: sock_no_sendpage,
+ .release = vcc_release,
+ .bind = pvc_bind,
+ .connect = pvc_connect,
+ .socketpair = sock_no_socketpair,
+ .accept = sock_no_accept,
+ .getname = pvc_getname,
+ .poll = atm_poll,
+ .ioctl = vcc_ioctl,
+ .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,
};
-#include <linux/smp_lock.h>
-SOCKOPS_WRAP(pvc_proto, PF_ATMPVC);
-
-
static int pvc_create(struct socket *sock,int protocol)
{
sock->ops = &pvc_proto_ops;
- return atm_create(sock,protocol,PF_ATMPVC);
+ return vcc_create(sock, protocol, PF_ATMPVC);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)