1582954daSRobert Watson /*- 2582954daSRobert Watson * Copyright (c) 2006 Robert N. M. Watson 3582954daSRobert Watson * All rights reserved. 4582954daSRobert Watson * 5582954daSRobert Watson * Redistribution and use in source and binary forms, with or without 6582954daSRobert Watson * modification, are permitted provided that the following conditions 7582954daSRobert Watson * are met: 8582954daSRobert Watson * 1. Redistributions of source code must retain the above copyright 9582954daSRobert Watson * notice, this list of conditions and the following disclaimer. 10582954daSRobert Watson * 2. Redistributions in binary form must reproduce the above copyright 11582954daSRobert Watson * notice, this list of conditions and the following disclaimer in the 12582954daSRobert Watson * documentation and/or other materials provided with the distribution. 13582954daSRobert Watson * 14582954daSRobert Watson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15582954daSRobert Watson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16582954daSRobert Watson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17582954daSRobert Watson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18582954daSRobert Watson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19582954daSRobert Watson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20582954daSRobert Watson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21582954daSRobert Watson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22582954daSRobert Watson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23582954daSRobert Watson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24582954daSRobert Watson * SUCH DAMAGE. 25582954daSRobert Watson * 26582954daSRobert Watson * $FreeBSD$ 27582954daSRobert Watson */ 28582954daSRobert Watson 29582954daSRobert Watson /* 30582954daSRobert Watson * Simple routing socket regression test: create and destroy a raw routing 31582954daSRobert Watson * socket, and make sure that dgram and stream don't work, socketpair, etc. 32582954daSRobert Watson */ 33582954daSRobert Watson 34582954daSRobert Watson #include <sys/types.h> 35582954daSRobert Watson #include <sys/socket.h> 36582954daSRobert Watson 37582954daSRobert Watson #include <net/route.h> 38582954daSRobert Watson 39582954daSRobert Watson #include <err.h> 40582954daSRobert Watson #include <errno.h> 41582954daSRobert Watson #include <unistd.h> 42582954daSRobert Watson 43582954daSRobert Watson int 44582954daSRobert Watson main(int argc, char *argv[]) 45582954daSRobert Watson { 46582954daSRobert Watson int sock, socks[2]; 47582954daSRobert Watson 48582954daSRobert Watson sock = socket(PF_ROUTE, SOCK_STREAM, 0); 49582954daSRobert Watson if (sock >= 0) { 50582954daSRobert Watson close(sock); 51582954daSRobert Watson errx(-1, "socket(PF_ROUTE, SOCK_STREAM, 0) returned %d", 52582954daSRobert Watson sock); 53582954daSRobert Watson } 54582954daSRobert Watson 55582954daSRobert Watson if (errno != EPROTONOSUPPORT) 56582954daSRobert Watson err(-1, "socket(PF_ROUTE, SOCK_STREAM, 0)"); 57582954daSRobert Watson 58582954daSRobert Watson sock = socket(PF_ROUTE, SOCK_DGRAM, 0); 59582954daSRobert Watson if (sock >= 0) { 60582954daSRobert Watson close(sock); 61582954daSRobert Watson errx(-1, "socket(PF_ROUTE, SOCK_DGRAM, 0) returned %d", 62582954daSRobert Watson sock); 63582954daSRobert Watson } 64582954daSRobert Watson 65582954daSRobert Watson if (errno != EPROTONOSUPPORT) 66582954daSRobert Watson err(-1, "socket(PF_ROUTE, SOCK_DGRAM, 0)"); 67582954daSRobert Watson 68582954daSRobert Watson sock = socket(PF_ROUTE, SOCK_RAW, 0); 69582954daSRobert Watson if (sock < 0) 70582954daSRobert Watson err(-1, "socket(PF_ROUTE, SOCK_RAW, 0)"); 71582954daSRobert Watson close(sock); 72582954daSRobert Watson 73582954daSRobert Watson if (socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) == 0) { 74582954daSRobert Watson close(socks[0]); 75582954daSRobert Watson close(socks[1]); 76582954daSRobert Watson errx(-1, 77582954daSRobert Watson "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) success"); 78582954daSRobert Watson } 79582954daSRobert Watson 80582954daSRobert Watson if (errno != EPROTONOSUPPORT) 81582954daSRobert Watson err(-1, "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks)"); 82582954daSRobert Watson 83582954daSRobert Watson if (socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks) == 0) { 84582954daSRobert Watson close(socks[0]); 85582954daSRobert Watson close(socks[1]); 86582954daSRobert Watson errx(-1, 87582954daSRobert Watson "socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks) success"); 88582954daSRobert Watson } 89582954daSRobert Watson 90582954daSRobert Watson if (errno != EPROTONOSUPPORT) 91582954daSRobert Watson err(-1, "socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks)"); 92582954daSRobert Watson 93582954daSRobert Watson if (socketpair(PF_ROUTE, SOCK_RAW, 0, socks) == 0) { 94582954daSRobert Watson close(socks[0]); 95582954daSRobert Watson close(socks[1]); 96582954daSRobert Watson errx(-1, 97582954daSRobert Watson "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) success"); 98582954daSRobert Watson } 99582954daSRobert Watson 100582954daSRobert Watson return (0); 101582954daSRobert Watson } 102