Path: blob/master/tools/testing/selftests/drivers/net/napi_id_helper.c
26288 views
// SPDX-License-Identifier: GPL-2.012#include <errno.h>3#include <stdio.h>4#include <stdlib.h>5#include <string.h>6#include <unistd.h>7#include <arpa/inet.h>8#include <sys/socket.h>9#include <netdb.h>1011#include "../../net/lib/ksft.h"1213int main(int argc, char *argv[])14{15struct sockaddr_storage address;16struct addrinfo *result;17struct addrinfo hints;18unsigned int napi_id;19socklen_t addr_len;20socklen_t optlen;21char buf[1024];22int opt = 1;23int family;24int server;25int client;26int ret;2728memset(&hints, 0, sizeof(hints));29hints.ai_family = AF_UNSPEC;30hints.ai_socktype = SOCK_STREAM;31hints.ai_flags = AI_PASSIVE;3233ret = getaddrinfo(argv[1], argv[2], &hints, &result);34if (ret != 0) {35fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));36return 1;37}3839family = result->ai_family;40addr_len = result->ai_addrlen;4142server = socket(family, SOCK_STREAM, IPPROTO_TCP);43if (server < 0) {44perror("socket creation failed");45freeaddrinfo(result);46if (errno == EAFNOSUPPORT)47return -1;48return 1;49}5051if (setsockopt(server, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {52perror("setsockopt");53freeaddrinfo(result);54return 1;55}5657memcpy(&address, result->ai_addr, result->ai_addrlen);58freeaddrinfo(result);5960if (bind(server, (struct sockaddr *)&address, addr_len) < 0) {61perror("bind failed");62return 1;63}6465if (listen(server, 1) < 0) {66perror("listen");67return 1;68}6970ksft_ready();7172client = accept(server, NULL, 0);73if (client < 0) {74perror("accept");75return 1;76}7778optlen = sizeof(napi_id);79ret = getsockopt(client, SOL_SOCKET, SO_INCOMING_NAPI_ID, &napi_id,80&optlen);81if (ret != 0) {82perror("getsockopt");83return 1;84}8586read(client, buf, 1024);8788ksft_wait();8990if (napi_id == 0) {91fprintf(stderr, "napi ID is 0\n");92return 1;93}9495close(client);96close(server);9798return 0;99}100101102