Как заменить struct tcp_opt в более новом ядре? - PullRequest
1 голос
/ 20 марта 2019

Я работаю над старым модулем для ядра 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
...