1157603Srwatson/*- 2157603Srwatson * Copyright (c) 2006 Robert N. M. Watson 3157603Srwatson * All rights reserved. 4157603Srwatson * 5157603Srwatson * Redistribution and use in source and binary forms, with or without 6157603Srwatson * modification, are permitted provided that the following conditions 7157603Srwatson * are met: 8157603Srwatson * 1. Redistributions of source code must retain the above copyright 9157603Srwatson * notice, this list of conditions and the following disclaimer. 10157603Srwatson * 2. Redistributions in binary form must reproduce the above copyright 11157603Srwatson * notice, this list of conditions and the following disclaimer in the 12157603Srwatson * documentation and/or other materials provided with the distribution. 13157603Srwatson * 14157603Srwatson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15157603Srwatson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16157603Srwatson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17157603Srwatson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18157603Srwatson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19157603Srwatson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20157603Srwatson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21157603Srwatson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22157603Srwatson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23157603Srwatson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24157603Srwatson * SUCH DAMAGE. 25157603Srwatson * 26157603Srwatson * $FreeBSD$ 27157603Srwatson */ 28157603Srwatson 29157603Srwatson/* 30157603Srwatson * Simple routing socket regression test: create and destroy a raw routing 31157603Srwatson * socket, and make sure that dgram and stream don't work, socketpair, etc. 32157603Srwatson */ 33157603Srwatson 34157603Srwatson#include <sys/types.h> 35157603Srwatson#include <sys/socket.h> 36157603Srwatson 37157603Srwatson#include <net/route.h> 38157603Srwatson 39157603Srwatson#include <err.h> 40157603Srwatson#include <errno.h> 41157603Srwatson#include <unistd.h> 42157603Srwatson 43157603Srwatsonint 44281392Sngiemain(void) 45157603Srwatson{ 46157603Srwatson int sock, socks[2]; 47157603Srwatson 48157603Srwatson sock = socket(PF_ROUTE, SOCK_STREAM, 0); 49157603Srwatson if (sock >= 0) { 50157603Srwatson close(sock); 51157603Srwatson errx(-1, "socket(PF_ROUTE, SOCK_STREAM, 0) returned %d", 52157603Srwatson sock); 53157603Srwatson } 54157603Srwatson 55294125Sngie if (errno != EPROTOTYPE) 56157603Srwatson err(-1, "socket(PF_ROUTE, SOCK_STREAM, 0)"); 57157603Srwatson 58157603Srwatson sock = socket(PF_ROUTE, SOCK_DGRAM, 0); 59157603Srwatson if (sock >= 0) { 60157603Srwatson close(sock); 61157603Srwatson errx(-1, "socket(PF_ROUTE, SOCK_DGRAM, 0) returned %d", 62157603Srwatson sock); 63157603Srwatson } 64157603Srwatson 65294125Sngie if (errno != EPROTOTYPE) 66157603Srwatson err(-1, "socket(PF_ROUTE, SOCK_DGRAM, 0)"); 67157603Srwatson 68157603Srwatson sock = socket(PF_ROUTE, SOCK_RAW, 0); 69157603Srwatson if (sock < 0) 70157603Srwatson err(-1, "socket(PF_ROUTE, SOCK_RAW, 0)"); 71157603Srwatson close(sock); 72157603Srwatson 73157603Srwatson if (socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) == 0) { 74157603Srwatson close(socks[0]); 75157603Srwatson close(socks[1]); 76157603Srwatson errx(-1, 77157603Srwatson "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) success"); 78157603Srwatson } 79157603Srwatson 80294125Sngie if (errno != EPROTOTYPE) 81157603Srwatson err(-1, "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks)"); 82157603Srwatson 83157603Srwatson if (socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks) == 0) { 84157603Srwatson close(socks[0]); 85157603Srwatson close(socks[1]); 86157603Srwatson errx(-1, 87157603Srwatson "socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks) success"); 88157603Srwatson } 89157603Srwatson 90294125Sngie if (errno != EPROTOTYPE) 91157603Srwatson err(-1, "socketpair(PF_ROUTE, SOCK_DGRAM, 0, socks)"); 92157603Srwatson 93157603Srwatson if (socketpair(PF_ROUTE, SOCK_RAW, 0, socks) == 0) { 94157603Srwatson close(socks[0]); 95157603Srwatson close(socks[1]); 96157603Srwatson errx(-1, 97157603Srwatson "socketpair(PF_ROUTE, SOCK_STREAM, 0, socks) success"); 98157603Srwatson } 99157603Srwatson 100157603Srwatson return (0); 101157603Srwatson} 102