Я работаю над старым модулем для ядра 2.4.x и хочу переписать его для ядра 4.15.0.19.
Есть объявление, которое вызывает ошибку во время компиляции:
struct tcp_opt *tp = &(sk->tp_pinfo.af_tcp);
Я проверил в более новом ядре, и структура tcp_opt нигде не определена, ни объединение tp_pinfo, ни af_tcp.
Из ядра 2.4.x оно объявлено внутри struct sock следующим образом:
union {
struct tcp_opt af_tcp;
#if defined(CONFIG_INET) || defined (CONFIG_INET_MODULE)
struct raw_opt tp_raw4;
#endif
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
struct raw6_opt tp_raw;
#endif /* CONFIG_IPV6 */
#if defined(CONFIG_SPX) || defined (CONFIG_SPX_MODULE)
struct spx_opt af_spx;
#endif /* CONFIG_SPX */
} tp_pinfo;
Какова цель первой инициализации (в начале вопроса) и как она заменяется в более новых ядрах?
РЕДАКТИРОВАТЬ:
Мне удалось решитьэто с помощью:
const struct tcp_sock *tp = tcp_sk(sk);
и последующего доступа к параметрам TCP следующим образом:
tp->rx_opt.rcv_tsval