#include <linux/skbuff.h>
#include <linux/can.h>
#include <linux/can/core.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#include <net/net_namespace.h>
+#endif
#include <net/sock.h>
#include "af_can.h"
kfree(sk->sk_protinfo);
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+static int can_create(struct net *net, struct socket *sock, int protocol)
+#else
static int can_create(struct socket *sock, int protocol)
+#endif
{
struct sock *sk;
struct can_proto *cp;
if (!cp || cp->type != sock->type)
return -EPROTONOSUPPORT;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if (net != &init_net)
+ return -EAFNOSUPPORT;
+#endif
+
if (cp->capability >= 0 && !capable(cp->capability))
return -EPERM;
sock->ops = cp->ops;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ sk = sk_alloc(net, PF_CAN, GFP_KERNEL, cp->prot, 1);
+#else
sk = sk_alloc(PF_CAN, GFP_KERNEL, cp->prot, 1);
+#endif
if (!sk)
return -ENOMEM;
#else
DBG_FRAME("af_can: can_rcv: received CAN frame",
(struct can_frame *)skb->data);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if ((dev->type != ARPHRD_CAN) || (dev->nd_net != &init_net)) {
+#else
if (dev->type != ARPHRD_CAN) {
+#endif
kfree_skb(skb);
return 0;
}
DBG("msg %ld for dev %p (%s idx %d)\n",
msg, dev, dev->name, dev->ifindex);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if (dev->nd_net != &init_net)
+ return NOTIFY_DONE;
+#endif
+
if (dev->type != ARPHRD_CAN)
return NOTIFY_DONE;
#include <linux/can/core.h>
#include <linux/can/bcm.h>
#include <net/sock.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#include <net/net_namespace.h>
+#endif
#include <linux/can/version.h> /* for RCSID. Removed by mkpatch script */
RCSID("$Id$");
if (!ifindex)
return "any";
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = __dev_get_by_index(&init_net, ifindex); /* no usage counting */
+#else
dev = __dev_get_by_index(ifindex); /* no usage counting */
+#endif
if (dev)
return dev->name;
if (!op->ifindex)
return;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, op->ifindex);
+#else
dev = dev_get_by_index(op->ifindex);
-
+#endif
if (!dev) {
/* RFC: should this bcm_op remove itself here? */
return;
if (op->rx_reg_dev) {
struct net_device *dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net,
+ op->ifindex);
+#else
dev = dev_get_by_index(op->ifindex);
+#endif
if (dev) {
bcm_rx_unreg(dev, op);
dev_put(dev);
"rx_op is %p\n", op->can_id, op);
if (ifindex) {
- struct net_device *dev = dev_get_by_index(ifindex);
+ struct net_device *dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ifindex);
+#else
+ dev = dev_get_by_index(ifindex);
+#endif
if (dev) {
can_rx_register(dev, op->can_id,
REGMASK(op->can_id),
DBG_FRAME("BCM: TX_SEND: sending frame",
(struct can_frame *)skb->data);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ifindex);
+#else
dev = dev_get_by_index(ifindex);
+#endif
if (!dev) {
kfree_skb(skb);
return -ENODEV;
ifindex = addr->can_ifindex; /* ifindex from sendto() */
if (ifindex) {
- struct net_device *dev = dev_get_by_index(ifindex);
+ struct net_device *dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ifindex);
+#else
+ dev = dev_get_by_index(ifindex);
+#endif
if (!dev) {
DBG("device %d not found\n", ifindex);
return -ENODEV;
DBG("msg %ld for dev %p (%s idx %d) sk %p bo->ifindex %d\n",
msg, dev, dev->name, dev->ifindex, sk, bo->ifindex);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if (dev->nd_net != &init_net)
+ return NOTIFY_DONE;
+#endif
+
if (dev->type != ARPHRD_CAN)
return NOTIFY_DONE;
if (op->rx_reg_dev) {
struct net_device *dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, op->ifindex);
+#else
dev = dev_get_by_index(op->ifindex);
+#endif
if (dev) {
bcm_rx_unreg(dev, op);
dev_put(dev);
/* bind a device to this socket */
if (addr->can_ifindex) {
- struct net_device *dev = dev_get_by_index(addr->can_ifindex);
+ struct net_device *dev;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, addr->can_ifindex);
+#else
+ dev = dev_get_by_index(addr->can_ifindex);
+#endif
if (!dev) {
DBG("could not find device index %d\n",
addr->can_ifindex);
#include <linux/can/core.h>
#include <linux/can/raw.h>
#include <net/sock.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#include <net/net_namespace.h>
+#endif
#include <linux/can/version.h> /* for RCSID. Removed by mkpatch script */
RCSID("$Id$");
DBG("msg %ld for dev %p (%s idx %d) sk %p ro->ifindex %d\n",
msg, dev, dev->name, dev->ifindex, sk, ro->ifindex);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ if (dev->nd_net != &init_net)
+ return NOTIFY_DONE;
+#endif
+
if (dev->type != ARPHRD_CAN)
return NOTIFY_DONE;
/* remove current filters & unregister */
if (ro->bound) {
if (ro->ifindex) {
- struct net_device *dev = dev_get_by_index(ro->ifindex);
+ struct net_device *dev;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ro->ifindex);
+#else
+ dev = dev_get_by_index(ro->ifindex);
+#endif
if (dev) {
raw_disable_filters(dev, sk);
raw_disable_errfilter(dev, sk);
if (ro->bound) {
/* unregister current filters for this device */
if (ro->ifindex) {
- struct net_device *dev = dev_get_by_index(ro->ifindex);
+ struct net_device *dev;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ro->ifindex);
+#else
+ dev = dev_get_by_index(ro->ifindex);
+#endif
if (dev) {
raw_disable_filters(dev, sk);
raw_disable_errfilter(dev, sk);
}
if (addr->can_ifindex) {
- struct net_device *dev = dev_get_by_index(addr->can_ifindex);
+ struct net_device *dev;
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, addr->can_ifindex);
+#else
+ dev = dev_get_by_index(addr->can_ifindex);
+#endif
if (!dev) {
DBG("could not find device %d\n", addr->can_ifindex);
err = -ENODEV;
lock_sock(sk);
if (ro->bound && ro->ifindex)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ro->ifindex);
+#else
dev = dev_get_by_index(ro->ifindex);
+#endif
/* remove current filters & unregister */
if (ro->bound)
lock_sock(sk);
if (ro->bound && ro->ifindex)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ro->ifindex);
+#else
dev = dev_get_by_index(ro->ifindex);
+#endif
/* remove current error mask */
if (ro->bound)
} else
ifindex = ro->ifindex;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+ dev = dev_get_by_index(&init_net, ifindex);
+#else
dev = dev_get_by_index(ifindex);
+#endif
if (!dev) {
DBG("device %d not found\n", ifindex);
return -ENXIO;