14 #include <linux/version.h>
15 #if defined(CONFIG_SMP) && ! defined(__SMP__)
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <asm/unistd.h>
23 #include <linux/sched.h>
24 #include <linux/wait.h>
26 #include <linux/netdevice.h>
28 #include <linux/pci.h>
29 #include <linux/rtnetlink.h>
30 #include <linux/ethtool.h>
36 #define MOD_NAME "bypass"
38 #define VERSION "\n"MOD_NAME" version 9.0.4\n"
58 *data = bypass_cb->
data;
64 static int doit(
int cmd,
int if_index,
int *data)
73 ret = do_cmd(dev, &ifr, cmd, data);
83 #define bp_symbol_get(fn_name) symbol_get(fn_name)
84 #define bp_symbol_put(fn_name) symbol_put(fn_name)
86 #define SET_BPLIB_INT_FN(fn_name, arg_type, arg, ret) \
87 ({ int (* fn_ex)(arg_type)=NULL; \
88 fn_ex=bp_symbol_get(fn_name##_sd); \
91 bp_symbol_put(fn_name##_sd); \
95 #define SET_BPLIB_INT_FN2(fn_name, arg_type, arg, arg_type1, arg1, ret) \
96 ({ int (* fn_ex)(arg_type,arg_type1)=NULL; \
97 fn_ex=bp_symbol_get(fn_name##_sd); \
99 ret= fn_ex(arg,arg1); \
100 bp_symbol_put(fn_name##_sd); \
103 #define SET_BPLIB_INT_FN3(fn_name, arg_type, arg, arg_type1, arg1,arg_type2, arg2, ret) \
104 ({ int (* fn_ex)(arg_type,arg_type1, arg_type2)=NULL; \
105 fn_ex=bp_symbol_get(fn_name##_sd); \
107 ret= fn_ex(arg,arg1,arg2); \
108 bp_symbol_put(fn_name##_sd); \
112 #define DO_BPLIB_GET_ARG_FN(fn_name,ioctl_val, if_index) \
113 ({ int data, ret=0; \
114 if(is_dev_sd(if_index)){ \
115 SET_BPLIB_INT_FN(fn_name, int, if_index, ret); \
118 return doit(ioctl_val,if_index, &data); \
121 #define DO_BPLIB_SET_ARG_FN(fn_name,ioctl_val,if_index,arg) \
122 ({ int data, ret=0; \
123 if(is_dev_sd(if_index)){ \
124 SET_BPLIB_INT_FN2(fn_name, int, if_index, int, arg, ret); \
128 return doit(ioctl_val,if_index, &data); \
131 static int is_dev_sd(
int if_index)
135 return (ret >= 0 ? 1 : 0);
143 int ret = 0, data = 0;
146 if ((dev = pci_get_drvdata(pdev)) !=
NULL)
147 if (((dev = pci_get_drvdata(pdev)) !=
NULL) &&
153 #if defined(BP_VENDOR_SUPPORT) && defined(ETHTOOL_GDRVINFO)
161 memset(&info, 0,
sizeof(info));
164 for (; bp_desc_array[
k]; k++)
179 ret = do_cmd(dev, &ifr,
IS_BYPASS, &data);
180 return (ret < 0 ? -1 : ret);
258 int data = ms_timeout, ret = 0;
259 if (is_dev_sd(if_index))
261 int *, ms_timeout_set, ret);
265 *ms_timeout_set =
ret;
274 int *data = ms_timeout_set, ret = 0;
275 if (is_dev_sd(if_index))
277 ms_timeout_set, ret);
285 int *data = ms_time_left, ret = 0;
286 if (is_dev_sd(if_index))
291 if ((ret == 0) && (*data != 0))
437 if (is_dev_sd(if_index)) {
439 struct bp_info *, bp_info, ret);
446 if (dev->
ifindex == if_index) {
450 memset(&ifr, 0,
sizeof(ifr));
463 sizeof(
struct bp_info));
464 ret = (ret < 0 ? -1 : 0);