guess some code for SUN_PROC_POINT
This commit is contained in:
@@ -65,6 +65,32 @@ struct devdata {
|
|||||||
#define VIOC_SYSCALL_DEV_OPENAFS _IOWR('C', 1, struct devdata)
|
#define VIOC_SYSCALL_DEV_OPENAFS _IOWR('C', 1, struct devdata)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _IOW
|
||||||
|
#ifdef _ILP32
|
||||||
|
struct sundevdata {
|
||||||
|
uint32_t param6;
|
||||||
|
uint32_t param5;
|
||||||
|
uint32_t param4;
|
||||||
|
uint32_t param3;
|
||||||
|
uint32_t param2;
|
||||||
|
uint32_t param1;
|
||||||
|
uint32_t syscall;
|
||||||
|
};
|
||||||
|
#define VIOC_SUN_SYSCALL_DEV _IOW('C', 2, struct sundevdata)
|
||||||
|
#else
|
||||||
|
struct sundevdata {
|
||||||
|
uint64_t param6;
|
||||||
|
uint64_t param5;
|
||||||
|
uint64_t param4;
|
||||||
|
uint64_t param3;
|
||||||
|
uint64_t param2;
|
||||||
|
uint64_t param1;
|
||||||
|
uint64_t syscall;
|
||||||
|
};
|
||||||
|
#define VIOC_SUN_SYSCALL_DEV _IOW('C', 1, struct sundevdata)
|
||||||
|
#endif
|
||||||
|
#endif /* _IOW */
|
||||||
|
|
||||||
|
|
||||||
int _kafs_debug; /* this should be done in a better way */
|
int _kafs_debug; /* this should be done in a better way */
|
||||||
|
|
||||||
@@ -77,6 +103,7 @@ int _kafs_debug; /* this should be done in a better way */
|
|||||||
#define LINUX_PROC_POINT 5
|
#define LINUX_PROC_POINT 5
|
||||||
#define AIX_ENTRY_POINTS 6
|
#define AIX_ENTRY_POINTS 6
|
||||||
#define MACOS_DEV_POINT 7
|
#define MACOS_DEV_POINT 7
|
||||||
|
#define SUN_PROC_POINT 8
|
||||||
|
|
||||||
static int afs_entry_point = UNKNOWN_ENTRY_POINT;
|
static int afs_entry_point = UNKNOWN_ENTRY_POINT;
|
||||||
static int afs_syscalls[2];
|
static int afs_syscalls[2];
|
||||||
@@ -192,6 +219,12 @@ try_ioctlpath(const char *path, unsigned long ioctlnum, int entrypoint)
|
|||||||
ret = ioctl(fd, ioctlnum, &data);
|
ret = ioctl(fd, ioctlnum, &data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SUN_PROC_POINT: {
|
||||||
|
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL };
|
||||||
|
data.param2 = (unsigned long)VIOCGETTOK;
|
||||||
|
ret = ioctl(fd, ioctlnum, &data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
@@ -273,6 +306,14 @@ k_pioctl(char *a_path,
|
|||||||
|
|
||||||
return data.retval;
|
return data.retval;
|
||||||
}
|
}
|
||||||
|
case SUN_PROC_POINT: {
|
||||||
|
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_PIOCTL };
|
||||||
|
data.param1 = (unsigned long)a_path;
|
||||||
|
data.param2 = (unsigned long)o_opcode;
|
||||||
|
data.param3 = (unsigned long)a_paramsP;
|
||||||
|
data.param4 = (unsigned long)a_followSymlinks;
|
||||||
|
return do_ioctl(&data);
|
||||||
|
}
|
||||||
#ifdef _AIX
|
#ifdef _AIX
|
||||||
case AIX_ENTRY_POINTS:
|
case AIX_ENTRY_POINTS:
|
||||||
return Pioctl(a_path, o_opcode, a_paramsP, a_followSymlinks);
|
return Pioctl(a_path, o_opcode, a_paramsP, a_followSymlinks);
|
||||||
@@ -331,6 +372,10 @@ k_setpag(void)
|
|||||||
return ret;
|
return ret;
|
||||||
return data.retval;
|
return data.retval;
|
||||||
}
|
}
|
||||||
|
case SUN_PROC_POINT: {
|
||||||
|
struct sundevdata data = { 0, 0, 0, 0, 0, 0, AFSCALL_SETPAG };
|
||||||
|
return do_ioctl(&data);
|
||||||
|
}
|
||||||
#ifdef _AIX
|
#ifdef _AIX
|
||||||
case AIX_ENTRY_POINTS:
|
case AIX_ENTRY_POINTS:
|
||||||
return Setpag();
|
return Setpag();
|
||||||
@@ -478,6 +523,12 @@ k_hasafs(void)
|
|||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
goto done;
|
goto done;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef VIOC_SUN_SYSCALL_DEV
|
||||||
|
ret = try_ioctlpath("/dev/afs", VIOC_SUN_SYSCALL_DEV, SUN_PROC_POINT);
|
||||||
|
if (ret == 0)
|
||||||
|
goto done;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(AFS_SYSCALL) || defined(AFS_SYSCALL2) || defined(AFS_SYSCALL3)
|
#if defined(AFS_SYSCALL) || defined(AFS_SYSCALL2) || defined(AFS_SYSCALL3)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user