if (unlikely(mptp_lookup(port) != NULL)) {
log_error("Port %u already in use\n", port);
err = -EADDRINUSE;
if (unlikely(mptp_lookup(port) != NULL)) {
log_error("Port %u already in use\n", port);
err = -EADDRINUSE;
-static int mptp_connect(struct socket *sock, struct sockaddr *addr, int addr_len, int flags)
+static int mptp_connect(struct socket *sock, struct sockaddr *addr,
+ int addr_len, int flags)
- struct sockaddr_mptp * mptp_addr = (struct sockaddr_mptp *) addr;
-
- if (unlikely(addr_len < sizeof(*mptp_addr) ||
- addr_len < mptp_addr->count * sizeof(struct mptp_dest) ||
- mptp_addr->count <= 0)) {
+ struct sockaddr_mptp *mptp_addr = (struct sockaddr_mptp *)addr;
+
+ if (unlikely(addr_len < sizeof(*mptp_addr) ||
+ addr_len <
+ mptp_addr->count * sizeof(struct mptp_dest)
+ || mptp_addr->count <= 0)) {
log_error("Invalid size or address family\n");
err = -EINVAL;
goto out;
}
ssk->dst = ntohs(mptp_addr->dests[0].port);
if (unlikely(ssk->dst == 0 || ssk->dst >= MAX_MPTP_PORT)) {
log_error("Invalid size or address family\n");
err = -EINVAL;
goto out;
}
ssk->dst = ntohs(mptp_addr->dests[0].port);
if (unlikely(ssk->dst == 0 || ssk->dst >= MAX_MPTP_PORT)) {
- log_debug("Received from user space destination port=%u and address=%u\n", ssk->dst, isk->inet_daddr);
+ log_debug
+ ("Received from user space destination port=%u and address=%u\n",
+ ssk->dst, isk->inet_daddr);
ssk->src = get_next_free_port();
if (unlikely(ssk->src == 0)) {
log_error("No free ports\n");
err = -ENOMEM;
goto out;
}
ssk->src = get_next_free_port();
if (unlikely(ssk->src == 0)) {
log_error("No free ports\n");
err = -ENOMEM;
goto out;
}
-static int mptp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len)
+static int mptp_sendmsg(struct kiocb *iocb, struct socket *sock,
+ struct msghdr *msg, size_t len)
- __be32 daddr;
- uint16_t sport;
- struct sk_buff * skb;
- struct sock * sk;
- struct inet_sock * isk;
- struct mptp_sock * ssk;
- struct mptphdr * shdr;
- int connected = 0;
- int totlen;
- struct rtable * rt = NULL;
- int dests = 0;
- int i;
- struct sockaddr_mptp * mptp_addr = NULL;
+ __be32 daddr;
+ uint16_t sport;
+ struct sk_buff *skb;
+ struct sock *sk;
+ struct inet_sock *isk;
+ struct mptp_sock *ssk;
+ struct mptphdr *shdr;
+ int connected = 0;
+ int totlen;
+ struct rtable *rt = NULL;
+ int dests = 0;
+ int i;
+ struct sockaddr_mptp *mptp_addr = NULL;
-static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
+static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock,
+ struct msghdr *msg, size_t len, int flags)
- log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk, flags);
+ log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk,
+ flags);
skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
if (unlikely(!skb)) {
skb = skb_recv_datagram(sk, flags, flags & MSG_DONTWAIT, &err);
if (unlikely(!skb)) {
for (i = 0; i < msg->msg_iovlen; i++) {
log_debug("Received skb %p\n", skb);
for (i = 0; i < msg->msg_iovlen; i++) {
log_debug("Received skb %p\n", skb);
- memcpy(&ret_addr->dests[i], &mptp_addr->dests[0], sizeof(ret_addr->dests[i]));
+ memcpy(&ret_addr->dests[i], &mptp_addr->dests[0],
+ sizeof(ret_addr->dests[i]));
- log_error("Malformed packet (packet_len=%u, skb_len=%u)\n", len, skb->len);
+ log_error("Malformed packet (packet_len=%u, skb_len=%u)\n", len,
+ skb->len);
- log_error("Malformed packet (packet_len=%u sizeof(mptphdr)=%u\n", len, sizeof(struct mptphdr));
+ log_error
+ ("Malformed packet (packet_len=%u sizeof(mptphdr)=%u\n",
+ len, sizeof(struct mptphdr));
- if (unlikely(src == 0 || dst == 0 || src >= MAX_MPTP_PORT || dst >= MAX_MPTP_PORT)) {
- log_error("Malformed packet (src=%u, dst=%u)\n", shdr->src, shdr->dst);
+ if (unlikely
+ (src == 0 || dst == 0 || src >= MAX_MPTP_PORT
+ || dst >= MAX_MPTP_PORT)) {
+ log_error("Malformed packet (src=%u, dst=%u)\n", shdr->src,
+ shdr->dst);
- log_debug("Received %u bytes from from port=%u to port=%u\n", len - sizeof(struct mptphdr), src, dst);
+ log_debug("Received %u bytes from from port=%u to port=%u\n",
+ len - sizeof(struct mptphdr), src, dst);
if (ssk == NULL) {
log_error("MPTP lookup failed for port %u\n", dst);
goto drop;
}
BUG_ON(addr_size > sizeof(skb->cb));
if (ssk == NULL) {
log_error("MPTP lookup failed for port %u\n", dst);
goto drop;
}
BUG_ON(addr_size > sizeof(skb->cb));
- log_debug("Setting sin_port=%u, sin_addr=%u\n", ntohs(shdr->src), mptp_addr->dests[0].addr);
+ log_debug("Setting sin_port=%u, sin_addr=%u\n", ntohs(shdr->src),
+ mptp_addr->dests[0].addr);
- err = ip_queue_rcv_skb((struct sock *) &ssk->sock, skb);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 36)
+ err = ip_queue_rcv_skb((struct sock *)&ssk->sock, skb);
+#else
+ err = sock_queue_rcv_skb((struct sock *)&ssk->sock, skb);
+#endif
kfree(skb);
return NET_RX_DROP;
}
static struct proto mptp_prot = {
.obj_size = sizeof(struct mptp_sock),
kfree(skb);
return NET_RX_DROP;
}
static struct proto mptp_prot = {
.obj_size = sizeof(struct mptp_sock),
- .family = PF_INET,
- .owner = THIS_MODULE,
- .release = mptp_release,
- .bind = mptp_bind,
- .connect = mptp_connect,
+ .family = PF_INET,
+ .owner = THIS_MODULE,
+ .release = mptp_release,
+ .bind = mptp_bind,
+ .connect = mptp_connect,
- .accept = sock_no_accept,
- .getname = sock_no_getname,
- .poll = datagram_poll,
- .ioctl = sock_no_ioctl,
- .listen = sock_no_listen,
- .shutdown = sock_no_shutdown,
+ .accept = sock_no_accept,
+ .getname = sock_no_getname,
+ .poll = datagram_poll,
+ .ioctl = sock_no_ioctl,
+ .listen = sock_no_listen,
+ .shutdown = sock_no_shutdown,
.setsockopt = sock_no_setsockopt,
.getsockopt = sock_no_getsockopt,
.setsockopt = sock_no_setsockopt,
.getsockopt = sock_no_getsockopt,
- .sendmsg = mptp_sendmsg,
- .recvmsg = mptp_recvmsg,
- .mmap = sock_no_mmap,
- .sendpage = sock_no_sendpage,
+ .sendmsg = mptp_sendmsg,
+ .recvmsg = mptp_recvmsg,
+ .mmap = sock_no_mmap,
+ .sendpage = sock_no_sendpage,