1*1b481fc3SMaciej Żenczykowski /*
2*1b481fc3SMaciej Żenczykowski * extapi.h - external interface of netlink code
3*1b481fc3SMaciej Żenczykowski *
4*1b481fc3SMaciej Żenczykowski * Declarations needed by non-netlink code (mostly ethtool.c).
5*1b481fc3SMaciej Żenczykowski */
6*1b481fc3SMaciej Żenczykowski
7*1b481fc3SMaciej Żenczykowski #ifndef ETHTOOL_EXTAPI_H__
8*1b481fc3SMaciej Żenczykowski #define ETHTOOL_EXTAPI_H__
9*1b481fc3SMaciej Żenczykowski
10*1b481fc3SMaciej Żenczykowski struct cmd_context;
11*1b481fc3SMaciej Żenczykowski struct nl_context;
12*1b481fc3SMaciej Żenczykowski
13*1b481fc3SMaciej Żenczykowski typedef int (*nl_func_t)(struct cmd_context *);
14*1b481fc3SMaciej Żenczykowski typedef bool (*nl_chk_t)(struct cmd_context *);
15*1b481fc3SMaciej Żenczykowski
16*1b481fc3SMaciej Żenczykowski #ifdef ETHTOOL_ENABLE_NETLINK
17*1b481fc3SMaciej Żenczykowski
18*1b481fc3SMaciej Żenczykowski void netlink_run_handler(struct cmd_context *ctx, nl_chk_t nlchk,
19*1b481fc3SMaciej Żenczykowski nl_func_t nlfunc, bool no_fallback);
20*1b481fc3SMaciej Żenczykowski
21*1b481fc3SMaciej Żenczykowski int nl_gset(struct cmd_context *ctx);
22*1b481fc3SMaciej Żenczykowski int nl_sset(struct cmd_context *ctx);
23*1b481fc3SMaciej Żenczykowski int nl_permaddr(struct cmd_context *ctx);
24*1b481fc3SMaciej Żenczykowski int nl_gfeatures(struct cmd_context *ctx);
25*1b481fc3SMaciej Żenczykowski int nl_sfeatures(struct cmd_context *ctx);
26*1b481fc3SMaciej Żenczykowski int nl_gprivflags(struct cmd_context *ctx);
27*1b481fc3SMaciej Żenczykowski int nl_sprivflags(struct cmd_context *ctx);
28*1b481fc3SMaciej Żenczykowski int nl_gring(struct cmd_context *ctx);
29*1b481fc3SMaciej Żenczykowski int nl_sring(struct cmd_context *ctx);
30*1b481fc3SMaciej Żenczykowski int nl_gchannels(struct cmd_context *ctx);
31*1b481fc3SMaciej Żenczykowski int nl_schannels(struct cmd_context *ctx);
32*1b481fc3SMaciej Żenczykowski int nl_gcoalesce(struct cmd_context *ctx);
33*1b481fc3SMaciej Żenczykowski int nl_scoalesce(struct cmd_context *ctx);
34*1b481fc3SMaciej Żenczykowski int nl_gpause(struct cmd_context *ctx);
35*1b481fc3SMaciej Żenczykowski int nl_spause(struct cmd_context *ctx);
36*1b481fc3SMaciej Żenczykowski int nl_geee(struct cmd_context *ctx);
37*1b481fc3SMaciej Żenczykowski int nl_seee(struct cmd_context *ctx);
38*1b481fc3SMaciej Żenczykowski int nl_tsinfo(struct cmd_context *ctx);
39*1b481fc3SMaciej Żenczykowski int nl_cable_test(struct cmd_context *ctx);
40*1b481fc3SMaciej Żenczykowski int nl_cable_test_tdr(struct cmd_context *ctx);
41*1b481fc3SMaciej Żenczykowski int nl_gtunnels(struct cmd_context *ctx);
42*1b481fc3SMaciej Żenczykowski int nl_gfec(struct cmd_context *ctx);
43*1b481fc3SMaciej Żenczykowski int nl_sfec(struct cmd_context *ctx);
44*1b481fc3SMaciej Żenczykowski bool nl_gstats_chk(struct cmd_context *ctx);
45*1b481fc3SMaciej Żenczykowski int nl_gstats(struct cmd_context *ctx);
46*1b481fc3SMaciej Żenczykowski int nl_gmodule(struct cmd_context *ctx);
47*1b481fc3SMaciej Żenczykowski int nl_smodule(struct cmd_context *ctx);
48*1b481fc3SMaciej Żenczykowski int nl_monitor(struct cmd_context *ctx);
49*1b481fc3SMaciej Żenczykowski int nl_getmodule(struct cmd_context *ctx);
50*1b481fc3SMaciej Żenczykowski int nl_grss(struct cmd_context *ctx);
51*1b481fc3SMaciej Żenczykowski int nl_plca_get_cfg(struct cmd_context *ctx);
52*1b481fc3SMaciej Żenczykowski int nl_plca_set_cfg(struct cmd_context *ctx);
53*1b481fc3SMaciej Żenczykowski int nl_plca_get_status(struct cmd_context *ctx);
54*1b481fc3SMaciej Żenczykowski int nl_get_mm(struct cmd_context *ctx);
55*1b481fc3SMaciej Żenczykowski int nl_set_mm(struct cmd_context *ctx);
56*1b481fc3SMaciej Żenczykowski int nl_gpse(struct cmd_context *ctx);
57*1b481fc3SMaciej Żenczykowski int nl_spse(struct cmd_context *ctx);
58*1b481fc3SMaciej Żenczykowski
59*1b481fc3SMaciej Żenczykowski void nl_monitor_usage(void);
60*1b481fc3SMaciej Żenczykowski
61*1b481fc3SMaciej Żenczykowski int nl_get_eeprom_page(struct cmd_context *ctx,
62*1b481fc3SMaciej Żenczykowski struct ethtool_module_eeprom *request);
63*1b481fc3SMaciej Żenczykowski
64*1b481fc3SMaciej Żenczykowski #else /* ETHTOOL_ENABLE_NETLINK */
65*1b481fc3SMaciej Żenczykowski
netlink_run_handler(struct cmd_context * ctx __maybe_unused,nl_chk_t nlchk __maybe_unused,nl_func_t nlfunc __maybe_unused,bool no_fallback)66*1b481fc3SMaciej Żenczykowski static inline void netlink_run_handler(struct cmd_context *ctx __maybe_unused,
67*1b481fc3SMaciej Żenczykowski nl_chk_t nlchk __maybe_unused,
68*1b481fc3SMaciej Żenczykowski nl_func_t nlfunc __maybe_unused,
69*1b481fc3SMaciej Żenczykowski bool no_fallback)
70*1b481fc3SMaciej Żenczykowski {
71*1b481fc3SMaciej Żenczykowski if (no_fallback) {
72*1b481fc3SMaciej Żenczykowski fprintf(stderr,
73*1b481fc3SMaciej Żenczykowski "Command requires kernel netlink support which is not "
74*1b481fc3SMaciej Żenczykowski "enabled in this ethtool binary\n");
75*1b481fc3SMaciej Żenczykowski exit(1);
76*1b481fc3SMaciej Żenczykowski }
77*1b481fc3SMaciej Żenczykowski }
78*1b481fc3SMaciej Żenczykowski
nl_monitor(struct cmd_context * ctx __maybe_unused)79*1b481fc3SMaciej Żenczykowski static inline int nl_monitor(struct cmd_context *ctx __maybe_unused)
80*1b481fc3SMaciej Żenczykowski {
81*1b481fc3SMaciej Żenczykowski fprintf(stderr, "Netlink not supported by ethtool, option --monitor unsupported.\n");
82*1b481fc3SMaciej Żenczykowski return -EOPNOTSUPP;
83*1b481fc3SMaciej Żenczykowski }
84*1b481fc3SMaciej Żenczykowski
nl_monitor_usage(void)85*1b481fc3SMaciej Żenczykowski static inline void nl_monitor_usage(void)
86*1b481fc3SMaciej Żenczykowski {
87*1b481fc3SMaciej Żenczykowski }
88*1b481fc3SMaciej Żenczykowski
89*1b481fc3SMaciej Żenczykowski static inline int
nl_get_eeprom_page(struct cmd_context * ctx __maybe_unused,struct ethtool_module_eeprom * request __maybe_unused)90*1b481fc3SMaciej Żenczykowski nl_get_eeprom_page(struct cmd_context *ctx __maybe_unused,
91*1b481fc3SMaciej Żenczykowski struct ethtool_module_eeprom *request __maybe_unused)
92*1b481fc3SMaciej Żenczykowski {
93*1b481fc3SMaciej Żenczykowski fprintf(stderr, "Netlink not supported by ethtool.\n");
94*1b481fc3SMaciej Żenczykowski return -EOPNOTSUPP;
95*1b481fc3SMaciej Żenczykowski }
96*1b481fc3SMaciej Żenczykowski
97*1b481fc3SMaciej Żenczykowski #define nl_gset NULL
98*1b481fc3SMaciej Żenczykowski #define nl_sset NULL
99*1b481fc3SMaciej Żenczykowski #define nl_permaddr NULL
100*1b481fc3SMaciej Żenczykowski #define nl_gfeatures NULL
101*1b481fc3SMaciej Żenczykowski #define nl_sfeatures NULL
102*1b481fc3SMaciej Żenczykowski #define nl_gprivflags NULL
103*1b481fc3SMaciej Żenczykowski #define nl_sprivflags NULL
104*1b481fc3SMaciej Żenczykowski #define nl_gring NULL
105*1b481fc3SMaciej Żenczykowski #define nl_sring NULL
106*1b481fc3SMaciej Żenczykowski #define nl_gchannels NULL
107*1b481fc3SMaciej Żenczykowski #define nl_schannels NULL
108*1b481fc3SMaciej Żenczykowski #define nl_gcoalesce NULL
109*1b481fc3SMaciej Żenczykowski #define nl_scoalesce NULL
110*1b481fc3SMaciej Żenczykowski #define nl_gpause NULL
111*1b481fc3SMaciej Żenczykowski #define nl_spause NULL
112*1b481fc3SMaciej Żenczykowski #define nl_geee NULL
113*1b481fc3SMaciej Żenczykowski #define nl_seee NULL
114*1b481fc3SMaciej Żenczykowski #define nl_tsinfo NULL
115*1b481fc3SMaciej Żenczykowski #define nl_cable_test NULL
116*1b481fc3SMaciej Żenczykowski #define nl_cable_test_tdr NULL
117*1b481fc3SMaciej Żenczykowski #define nl_gtunnels NULL
118*1b481fc3SMaciej Żenczykowski #define nl_gfec NULL
119*1b481fc3SMaciej Żenczykowski #define nl_sfec NULL
120*1b481fc3SMaciej Żenczykowski #define nl_gstats_chk NULL
121*1b481fc3SMaciej Żenczykowski #define nl_gstats NULL
122*1b481fc3SMaciej Żenczykowski #define nl_getmodule NULL
123*1b481fc3SMaciej Żenczykowski #define nl_gmodule NULL
124*1b481fc3SMaciej Żenczykowski #define nl_smodule NULL
125*1b481fc3SMaciej Żenczykowski #define nl_grss NULL
126*1b481fc3SMaciej Żenczykowski #define nl_plca_get_cfg NULL
127*1b481fc3SMaciej Żenczykowski #define nl_plca_set_cfg NULL
128*1b481fc3SMaciej Żenczykowski #define nl_plca_get_status NULL
129*1b481fc3SMaciej Żenczykowski #define nl_get_mm NULL
130*1b481fc3SMaciej Żenczykowski #define nl_set_mm NULL
131*1b481fc3SMaciej Żenczykowski #define nl_gpse NULL
132*1b481fc3SMaciej Żenczykowski #define nl_spse NULL
133*1b481fc3SMaciej Żenczykowski
134*1b481fc3SMaciej Żenczykowski #endif /* ETHTOOL_ENABLE_NETLINK */
135*1b481fc3SMaciej Żenczykowski
136*1b481fc3SMaciej Żenczykowski #endif /* ETHTOOL_EXTAPI_H__ */
137