#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/kernel.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
#include <linux/completion.h>
#include <linux/etherdevice.h>
#include <linux/if_bridge.h>
#include <net/genetlink.h>
#include "openvswitch/brcompat-netlink.h"
-#include "brc_procfs.h"
#include "datapath.h"
static struct genl_family brc_genl_family;
static struct sk_buff *brc_reply; /* Reply from userspace. */
static u32 brc_seq; /* Sequence number for current op. */
-static struct sk_buff *brc_send_command(struct sk_buff *, struct nlattr **attrs);
+static struct sk_buff *brc_send_command(struct sk_buff *,
+ struct nlattr **attrs);
static int brc_send_simple_command(struct sk_buff *);
static struct sk_buff *brc_make_request(int op, const char *bridge,
int err;
switch (cmd) {
- case SIOCDEVPRIVATE:
- err = old_dev_ioctl(dev, rq, cmd);
- break;
-
- case SIOCBRADDIF:
- return brc_add_del_port(dev, rq->ifr_ifindex, 1);
- case SIOCBRDELIF:
- return brc_add_del_port(dev, rq->ifr_ifindex, 0);
-
- default:
- err = -EOPNOTSUPP;
- break;
+ case SIOCDEVPRIVATE:
+ err = old_dev_ioctl(dev, rq, cmd);
+ break;
+
+ case SIOCBRADDIF:
+ return brc_add_del_port(dev, rq->ifr_ifindex, 1);
+ case SIOCBRDELIF:
+ return brc_add_del_port(dev, rq->ifr_ifindex, 0);
+
+ default:
+ err = -EOPNOTSUPP;
+ break;
}
return err;
/* Attribute policy: what each attribute may contain. */
static struct nla_policy brc_genl_policy[BRC_GENL_A_MAX + 1] = {
[BRC_GENL_A_ERR_CODE] = { .type = NLA_U32 },
-
-#ifdef HAVE_NLA_NUL_STRING
- [BRC_GENL_A_PROC_DIR] = { .type = NLA_NUL_STRING,
- .len = BRC_NAME_LEN_MAX },
- [BRC_GENL_A_PROC_NAME] = { .type = NLA_NUL_STRING,
- .len = BRC_NAME_LEN_MAX },
- [BRC_GENL_A_PROC_DATA] = { .type = NLA_NUL_STRING },
-#endif
-
[BRC_GENL_A_FDB_DATA] = { .type = NLA_UNSPEC },
};
.policy = brc_genl_policy,
.doit = brc_genl_dp_result,
},
- { .cmd = BRC_GENL_C_SET_PROC,
- .flags = GENL_ADMIN_PERM, /* Requires CAP_NET_ADMIN privelege. */
- .policy = brc_genl_policy,
- .doit = brc_genl_set_proc,
- },
};
static struct sk_buff *brc_send_command(struct sk_buff *request,
if (!wait_for_completion_timeout(&brc_done, BRC_TIMEOUT)) {
pr_warn("timed out waiting for userspace\n");
goto error;
- }
+ }
/* Grab reply. */
spin_lock_irqsave(&brc_lock, flags);
{
int err;
- printk("Open vSwitch Bridge Compatibility, built "__DATE__" "__TIME__"\n");
+ pr_info("Open vSwitch Bridge Compatibility, built "__DATE__" "__TIME__"\n");
/* Set the bridge ioctl handler */
brioctl_set(brc_ioctl_deviceless_stub);
brioctl_set(NULL);
genl_unregister_family(&brc_genl_family);
- brc_procfs_exit();
}
module_init(brc_init);