Для проекта, в котором я хочу, чтобы данные доходили до ядра из пользовательского пространства, я уже создал новые сокеты для строк и целых чисел, но я застреваю со структурами. Как вы отправляете структуру из пользовательского пространства в ядро?
Я пытался использовать copy_from_user, но я думаю, что что-то не так в том, как я использую эту функцию. Поскольку я думаю, что copy_from_user должен работать, я прав в этом?
Структура, которую я пытаюсь отправить из пользовательского пространства в ядро:
struct mptcp_socket_info {
__u8 threshold_s1;
__u8 threshold_s2;
}
Код в ядре:
CASE: MPTCP_SOCKET_INFO: {
if (optlen < 1)
return EINVAL;
lock_sock(sk);
copy_from_user(tcp_sk(mptcp_meta_sk(sk))->mpcb->socket_info, optval, sizeof(struct mptcp_socket_info));
release_sock(sk);
return 0;
}
Код в пользовательском пространстве:
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
struct mptcp_socket_info socket_info;
socket_info.threshold_s1 = 100;
socket_info.threshold_s2 = 50;
-----
-----
setsockopt(sockfd, SOL_TCP, MPTCP_SOCKET_INFO, &socket_info, sizeof(socket_info));
Когда я запускаю этот код, ядро падает, и оно говорит, что оно падает, когда я пытаюсь установить значения в socketopt.