All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] [bonding 2.6] Add bonding ioctl hook
@ 2004-01-08 16:27 Amir Noam
  0 siblings, 0 replies; only message in thread
From: Amir Noam @ 2004-01-08 16:27 UTC (permalink / raw)
  To: Jeff Garzik, Jay Vosburgh; +Cc: bonding-devel, netdev

Add two bonding ioctls:

SIOCBONDING: ioctl hook to handle commands not directed at a
specific bond interface.

SIOCBONDDEVICE: ioctl to handle commands for a bond interface. This
ioctl can also handle all existing commands, so we can regard them as
obsolete in the future.

All future bonding operations will be a sub-command of one of these
ioctls.


diff -Nuarp a/include/linux/sockios.h b/include/linux/sockios.h
--- a/include/linux/sockios.h	Thu Jan  8 18:06:41 2004
+++ b/include/linux/sockios.h	Thu Jan  8 18:06:42 2004
@@ -115,7 +115,9 @@
 #define SIOCBONDSLAVEINFOQUERY 0x8993   /* rtn info about slave state   */
 #define SIOCBONDINFOQUERY      0x8994	/* rtn info about bond state    */
 #define SIOCBONDCHANGEACTIVE   0x8995   /* update to a new active slave */
-			
+#define SIOCBONDING     0x8996          /* deviceless bonding commands */
+#define SIOCBONDDEVICE  0x8997          /* device oriented bonding commands */
+
 /* Device private ioctl calls */
 
 /*
diff -Nuarp a/net/core/dev.c b/net/core/dev.c
--- a/net/core/dev.c	Thu Jan  8 18:06:41 2004
+++ b/net/core/dev.c	Thu Jan  8 18:06:42 2004
@@ -2408,6 +2408,7 @@ static int dev_ifsioc(struct ifreq *ifr,
 			    cmd == SIOCBONDSLAVEINFOQUERY ||
 			    cmd == SIOCBONDINFOQUERY ||
 			    cmd == SIOCBONDCHANGEACTIVE ||
+			    cmd == SIOCBONDDEVICE ||
 			    cmd == SIOCGMIIPHY ||
 			    cmd == SIOCGMIIREG ||
 			    cmd == SIOCSMIIREG ||
@@ -2565,6 +2566,7 @@ int dev_ioctl(unsigned int cmd, void *ar
 		case SIOCBONDSLAVEINFOQUERY:
 		case SIOCBONDINFOQUERY:
 		case SIOCBONDCHANGEACTIVE:
+		case SIOCBONDDEVICE:
 			if (!capable(CAP_NET_ADMIN))
 				return -EPERM;
 			dev_load(ifr.ifr_name);
diff -Nuarp a/net/socket.c b/net/socket.c
--- a/net/socket.c	Thu Jan  8 18:06:41 2004
+++ b/net/socket.c	Thu Jan  8 18:06:42 2004
@@ -754,6 +754,17 @@ void dlci_ioctl_set(int (*hook)(unsigned
 }
 EXPORT_SYMBOL(dlci_ioctl_set);
 
+static DECLARE_MUTEX(bond_ioctl_mutex);
+static int (*bond_ioctl_hook)(unsigned long arg);
+
+void bond_ioctl_set(int (*hook)(unsigned long))
+{
+	down(&bond_ioctl_mutex);
+	bond_ioctl_hook = hook;
+	up(&bond_ioctl_mutex);
+}
+EXPORT_SYMBOL(bond_ioctl_set);
+
 /*
  *	With an ioctl, arg may well be a user mode pointer, but we don't know
  *	what to do with it - that's up to the protocol still.
@@ -826,6 +837,17 @@ static int sock_ioctl(struct inode *inod
 				up(&dlci_ioctl_mutex);
 			}
 			break;
+		case SIOCBONDING:
+			err = -ENOPKG;
+			if (!bond_ioctl_hook)
+				request_module("bonding");
+
+			down(&bond_ioctl_mutex);
+			if (bond_ioctl_hook) {
+				err = bond_ioctl_hook(arg);
+			}
+			up(&bond_ioctl_mutex);
+			break;
 		default:
 			err = sock->ops->ioctl(sock, cmd, arg);
 			break;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2004-01-08 16:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-08 16:27 [PATCH 1/4] [bonding 2.6] Add bonding ioctl hook Amir Noam

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.