1e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt/* 2e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * dhcpcd - DHCP client daemon 3a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt * Copyright (c) 2006-2012 Roy Marples <roy@marples.name> 4e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * All rights reserved 5e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 6e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * Redistribution and use in source and binary forms, with or without 7e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * modification, are permitted provided that the following conditions 8e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * are met: 9e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 1. Redistributions of source code must retain the above copyright 10e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * notice, this list of conditions and the following disclaimer. 11e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 2. Redistributions in binary form must reproduce the above copyright 12e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * notice, this list of conditions and the following disclaimer in the 13e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * documentation and/or other materials provided with the distribution. 14e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * 15e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt * SUCH DAMAGE. 26e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt */ 27e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 28e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <sys/param.h> 29a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#include <sys/socket.h> 30e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <sys/sysctl.h> 31e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include <sys/utsname.h> 32a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#include <netinet/in.h> 33a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 34a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt#include <syslog.h> 35e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 36e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#include "platform.h" 37e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 38e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#ifndef SYS_NMLN /* OSX */ 39e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt# define SYS_NMLN 256 40e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt#endif 41e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 42e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtstatic char march[SYS_NMLN]; 43e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 44e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidtchar * 45e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidthardware_platform(void) 46e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt{ 47e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt int mib[2] = { CTL_HW, HW_MACHINE_ARCH }; 48e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt size_t len = sizeof(march); 49e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt 50e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), 51e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt march, &len, NULL, 0) != 0) 52e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt return NULL; 53e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt return march; 54e86eee143ed21592f88a46623a81f71002430459Dmitry Shmidt} 55a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 56a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidtstatic int 57a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidtinet6_sysctl(int code) 58a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt{ 59a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt int mib[] = { CTL_NET, PF_INET6, IPPROTO_IPV6, 0 }; 60a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt int val; 61a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt size_t size; 62a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 63a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt mib[3] = code; 64a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt size = sizeof(val); 65a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt if (sysctl(mib, sizeof(mib)/sizeof(mib[0]), &val, &size, NULL, 0) == -1) 66a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return -1; 67a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return val; 68a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt} 69a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 70a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidtint 71a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidtcheck_ipv6(const char *ifname) 72a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt{ 73a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 74a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt /* BSD doesn't support these values per iface, so just reutrn 1 */ 75a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt if (ifname) 76a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return 1; 77a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt 78a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt if (inet6_sysctl(IPV6CTL_ACCEPT_RTADV) != 1) { 79a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt syslog(LOG_WARNING, 80a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt "Kernel is not configured to accept IPv6 RAs"); 81a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return 0; 82a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt } 83a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt if (inet6_sysctl(IPV6CTL_FORWARDING) != 0) { 84a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt syslog(LOG_WARNING, 85a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt "Kernel is configured as a router, not a host"); 86a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return 0; 87a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt } 88a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt return 1; 89a3a2260384a906e1674c7498c2f479e9f37bc503Dmitry Shmidt} 90