| 100 | } |
| 101 | |
| 102 | static int |
| 103 | dev_uev_socket_fd_create(void) |
| 104 | { |
| 105 | struct sockaddr_nl addr; |
| 106 | int ret, fd; |
| 107 | |
| 108 | fd = socket(PF_NETLINK, SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK, |
| 109 | NETLINK_KOBJECT_UEVENT); |
| 110 | if (fd < 0) { |
| 111 | RTE_LOG(ERR, EAL, "create uevent fd failed.\n"); |
| 112 | return -1; |
| 113 | } |
| 114 | |
| 115 | memset(&addr, 0, sizeof(addr)); |
| 116 | addr.nl_family = AF_NETLINK; |
| 117 | addr.nl_pid = 0; |
| 118 | addr.nl_groups = 0xffffffff; |
| 119 | |
| 120 | ret = bind(fd, (struct sockaddr *) &addr, sizeof(addr)); |
| 121 | if (ret < 0) { |
| 122 | RTE_LOG(ERR, EAL, "Failed to bind uevent socket.\n"); |
| 123 | goto err; |
| 124 | } |
| 125 | |
| 126 | if (rte_intr_fd_set(intr_handle, fd)) |
| 127 | goto err; |
| 128 | |
| 129 | return 0; |
| 130 | err: |
| 131 | close(fd); |
| 132 | return ret; |
| 133 | } |
| 134 | |
| 135 | struct rte_dev_event { |
| 136 | enum rte_dev_event_type type; /**< device event type */ |
no test coverage detected