|
@@ -32,15 +32,8 @@ struct l2tp_ip_sock {
|
|
/* inet_sock has to be the first member of l2tp_ip_sock */
|
|
/* inet_sock has to be the first member of l2tp_ip_sock */
|
|
struct inet_sock inet;
|
|
struct inet_sock inet;
|
|
|
|
|
|
- __u32 conn_id;
|
|
|
|
- __u32 peer_conn_id;
|
|
|
|
-
|
|
|
|
- __u64 tx_packets;
|
|
|
|
- __u64 tx_bytes;
|
|
|
|
- __u64 tx_errors;
|
|
|
|
- __u64 rx_packets;
|
|
|
|
- __u64 rx_bytes;
|
|
|
|
- __u64 rx_errors;
|
|
|
|
|
|
+ u32 conn_id;
|
|
|
|
+ u32 peer_conn_id;
|
|
};
|
|
};
|
|
|
|
|
|
static DEFINE_RWLOCK(l2tp_ip_lock);
|
|
static DEFINE_RWLOCK(l2tp_ip_lock);
|
|
@@ -298,7 +291,6 @@ out_in_use:
|
|
static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
|
static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
|
{
|
|
{
|
|
struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *) uaddr;
|
|
struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *) uaddr;
|
|
- struct inet_sock *inet = inet_sk(sk);
|
|
|
|
int rc;
|
|
int rc;
|
|
|
|
|
|
if (addr_len < sizeof(*lsa))
|
|
if (addr_len < sizeof(*lsa))
|
|
@@ -374,7 +366,6 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
|
{
|
|
{
|
|
struct sk_buff *skb;
|
|
struct sk_buff *skb;
|
|
int rc;
|
|
int rc;
|
|
- struct l2tp_ip_sock *lsa = l2tp_ip_sk(sk);
|
|
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
struct rtable *rt = NULL;
|
|
struct rtable *rt = NULL;
|
|
struct flowi4 *fl4;
|
|
struct flowi4 *fl4;
|
|
@@ -473,14 +464,8 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
|
rcu_read_unlock();
|
|
rcu_read_unlock();
|
|
|
|
|
|
error:
|
|
error:
|
|
- /* Update stats */
|
|
|
|
- if (rc >= 0) {
|
|
|
|
- lsa->tx_packets++;
|
|
|
|
- lsa->tx_bytes += len;
|
|
|
|
|
|
+ if (rc >= 0)
|
|
rc = len;
|
|
rc = len;
|
|
- } else {
|
|
|
|
- lsa->tx_errors++;
|
|
|
|
- }
|
|
|
|
|
|
|
|
out:
|
|
out:
|
|
release_sock(sk);
|
|
release_sock(sk);
|
|
@@ -498,7 +483,6 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
|
size_t len, int noblock, int flags, int *addr_len)
|
|
size_t len, int noblock, int flags, int *addr_len)
|
|
{
|
|
{
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
- struct l2tp_ip_sock *lsk = l2tp_ip_sk(sk);
|
|
|
|
size_t copied = 0;
|
|
size_t copied = 0;
|
|
int err = -EOPNOTSUPP;
|
|
int err = -EOPNOTSUPP;
|
|
struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
|
|
struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
|
|
@@ -540,15 +524,7 @@ static int l2tp_ip_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
|
|
done:
|
|
done:
|
|
skb_free_datagram(sk, skb);
|
|
skb_free_datagram(sk, skb);
|
|
out:
|
|
out:
|
|
- if (err) {
|
|
|
|
- lsk->rx_errors++;
|
|
|
|
- return err;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- lsk->rx_packets++;
|
|
|
|
- lsk->rx_bytes += copied;
|
|
|
|
-
|
|
|
|
- return copied;
|
|
|
|
|
|
+ return err ? err : copied;
|
|
}
|
|
}
|
|
|
|
|
|
static struct proto l2tp_ip_prot = {
|
|
static struct proto l2tp_ip_prot = {
|