DF-3358 / rtget_plain.c
/* control: plain RTM_GET (RTA_DST only) must NOT be EPERM post-fix */ #include <sys/types.h> #include <sys/socket.h> #include <net/route.h> #include <netinet/in.h> #include <errno.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(void) { struct { struct rt_msghdr rtm; struct sockaddr_in dst; } m; int s = socket(PF_ROUTE, SOCK_RAW, 0), n; if (s < 0) { perror("socket"); return 1; } memset(&m, 0, sizeof(m)); m.rtm.rtm_msglen = sizeof(m); m.rtm.rtm_version = RTM_VERSION; m.rtm.rtm_type = RTM_GET; m.rtm.rtm_addrs = RTA_DST; m.dst.sin_len = sizeof(m.dst); m.dst.sin_family = AF_INET; m.dst.sin_addr.s_addr = htonl(0x0a000203); n = write(s, &m, sizeof(m)); printf("write=%d errno=%d (%s)\n", n, errno, strerror(errno)); return (errno == EPERM); } |