|  | /* | 
|  | *	ioctl's for the Digi Intl. RightSwitch | 
|  | * | 
|  | *	These network driver ioctl's are a bit obtuse compared to the usual | 
|  | *	ioctl's for a "normal" device driver.  Hey, I didn't invent it. | 
|  | * | 
|  | *	Typical use: | 
|  | * | 
|  | *	struct ifreq	ifr; | 
|  | *	DGRS_IOCTL	ioc; | 
|  | *	int		x; | 
|  | * | 
|  | *	strcpy(ifr.ifr_name, "eth1"); | 
|  | *	ifr.ifr_data = (caddr_t) &ioc; | 
|  | *	ioc.cmd = DGRS_GETMEM; | 
|  | *	ioc.len = sizeof(x); | 
|  | *	ioc.data = (caddr_t) &x; | 
|  | *	rc = ioctl(fd, DGRSIOCTL, &ifr); | 
|  | *	printf("rc=%d mem=%x\n", rc, x); | 
|  | * | 
|  | */ | 
|  | #include <linux/sockios.h> | 
|  |  | 
|  | #define DGRSIOCTL      SIOCDEVPRIVATE | 
|  |  | 
|  | typedef struct dgrs_ioctl { | 
|  | unsigned short cmd;	/* Command to run */ | 
|  | unsigned short len;	/* Length of the data buffer */ | 
|  | unsigned char  __user *data;	/* Pointer to the data buffer */ | 
|  | unsigned short	port;	/* port number for command, if needed */ | 
|  | unsigned short	filter;	/* filter number for command, if needed */ | 
|  | } DGRS_IOCTL; | 
|  |  | 
|  | /* | 
|  | *	Commands for the driver | 
|  | */ | 
|  | #define	DGRS_GETMEM		0x01	/* Get the dual port memory address */ | 
|  | #define	DGRS_SETFILTER		0x02	/* Set a filter */ |