1*f94098a9SRobert Mustacchi#!/bin/ksh 2*f94098a9SRobert Mustacchi# 3*f94098a9SRobert Mustacchi# This file and its contents are supplied under the terms of the 4*f94098a9SRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0. 5*f94098a9SRobert Mustacchi# You may only use this file in accordance with the terms of version 6*f94098a9SRobert Mustacchi# 1.0 of the CDDL. 7*f94098a9SRobert Mustacchi# 8*f94098a9SRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this 9*f94098a9SRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at 10*f94098a9SRobert Mustacchi# http://www.illumos.org/license/CDDL. 11*f94098a9SRobert Mustacchi# 12*f94098a9SRobert Mustacchi 13*f94098a9SRobert Mustacchi# 14*f94098a9SRobert Mustacchi# Copyright (c) 2014, Joyent, Inc. 15*f94098a9SRobert Mustacchi# 16*f94098a9SRobert Mustacchi 17*f94098a9SRobert Mustacchiai_arg0="$(basename $0)" 18*f94098a9SRobert Mustacchiai_stub="teststub$$" 19*f94098a9SRobert Mustacchiai_vnic="testvnic$$" 20*f94098a9SRobert Mustacchi 21*f94098a9SRobert Mustacchifunction fatal 22*f94098a9SRobert Mustacchi{ 23*f94098a9SRobert Mustacchi typeset msg="$*" 24*f94098a9SRobert Mustacchi [[ -z "$msg" ]] && msg="failed" 25*f94098a9SRobert Mustacchi echo "TEST_FAIL: $vt_arg0: $msg" >&2 26*f94098a9SRobert Mustacchi exit 1 27*f94098a9SRobert Mustacchi} 28*f94098a9SRobert Mustacchi 29*f94098a9SRobert Mustacchifunction setup 30*f94098a9SRobert Mustacchi{ 31*f94098a9SRobert Mustacchi dladm create-etherstub $ai_stub || fatal "failed to create etherstub" 32*f94098a9SRobert Mustacchi dladm create-vnic -l $ai_stub $ai_vnic || fatal "failed to create vnic" 33*f94098a9SRobert Mustacchi} 34*f94098a9SRobert Mustacchi 35*f94098a9SRobert Mustacchifunction cleanup 36*f94098a9SRobert Mustacchi{ 37*f94098a9SRobert Mustacchi dladm delete-vnic $ai_vnic || fatal "failed to remove vnic" 38*f94098a9SRobert Mustacchi dladm delete-etherstub $ai_stub || fatal "failed to remove etherstub" 39*f94098a9SRobert Mustacchi} 40*f94098a9SRobert Mustacchi 41*f94098a9SRobert Mustacchifunction runtest 42*f94098a9SRobert Mustacchi{ 43*f94098a9SRobert Mustacchi dladm set-linkprop -p allowed-ips="$@" $ai_vnic 2>/dev/null 44*f94098a9SRobert Mustacchi} 45*f94098a9SRobert Mustacchi 46*f94098a9SRobert Mustacchifunction epass 47*f94098a9SRobert Mustacchi{ 48*f94098a9SRobert Mustacchi runtest $* || fatal "allowed-ips=$* failed, expected success\n" 49*f94098a9SRobert Mustacchi} 50*f94098a9SRobert Mustacchi 51*f94098a9SRobert Mustacchifunction efail 52*f94098a9SRobert Mustacchi{ 53*f94098a9SRobert Mustacchi runtest $* && fatal "allowed-ips=$* succeeded, expected failure\n" 54*f94098a9SRobert Mustacchi} 55*f94098a9SRobert Mustacchi 56*f94098a9SRobert Mustacchi# 57*f94098a9SRobert Mustacchi# Run through all IPv6 prefixes for validity with a token prefix 58*f94098a9SRobert Mustacchi# 59*f94098a9SRobert Mustacchifunction allv6 60*f94098a9SRobert Mustacchi{ 61*f94098a9SRobert Mustacchi typeset i; 62*f94098a9SRobert Mustacchi for ((i = 1; i <= 128; i++)); do 63*f94098a9SRobert Mustacchi epass "8000::/$i" 64*f94098a9SRobert Mustacchi done 65*f94098a9SRobert Mustacchi} 66*f94098a9SRobert Mustacchi 67*f94098a9SRobert Mustacchi# 68*f94098a9SRobert Mustacchi# Run through all of the v6 prefixes except /128 and ensure that they fail for 69*f94098a9SRobert Mustacchi# a given IPv6 address because the other bits are set. 70*f94098a9SRobert Mustacchi# 71*f94098a9SRobert Mustacchifunction v6specific 72*f94098a9SRobert Mustacchi{ 73*f94098a9SRobert Mustacchi typeset i; 74*f94098a9SRobert Mustacchi for ((i = 0; i < 128; i++)); do 75*f94098a9SRobert Mustacchi efail 2600:3c00::f03c:91ff:fe96:a267/$i 76*f94098a9SRobert Mustacchi done 77*f94098a9SRobert Mustacchi} 78*f94098a9SRobert Mustacchi 79*f94098a9SRobert Mustacchisetup 80*f94098a9SRobert Mustacchi 81*f94098a9SRobert Mustacchi# Basic IPv4 single and multiple IPs 82*f94098a9SRobert Mustacchiefail 0.0.0.0 83*f94098a9SRobert Mustacchiepass 127.0.0.1 84*f94098a9SRobert Mustacchiepass 127.0.0.1,127.0.0.2 85*f94098a9SRobert Mustacchiefail 127.0.0.1,127.0.0.1 86*f94098a9SRobert Mustacchiepass 10.167.169.23 87*f94098a9SRobert Mustacchiepass 11.167.169.23 88*f94098a9SRobert Mustacchiepass 12.167.169.23 89*f94098a9SRobert Mustacchiepass 10.167.169.23,11.167.169.23,12.167.169.23 90*f94098a9SRobert Mustacchiefail 256.1.1.1 91*f94098a9SRobert Mustacchiefail 1.256.1.1 92*f94098a9SRobert Mustacchiefail 1.1.256.1 93*f94098a9SRobert Mustacchiefail 1.1.1.256 94*f94098a9SRobert Mustacchiefail 300.300.300.300 95*f94098a9SRobert Mustacchiefail 300.300.300.300,1.1.1.1 96*f94098a9SRobert Mustacchiefail 1.1.1.1,300.300.300.300 97*f94098a9SRobert Mustacchiefail 3.-3.3.-3 98*f94098a9SRobert Mustacchi 99*f94098a9SRobert Mustacchi# Basic IPv4 prefixes 100*f94098a9SRobert Mustacchiefail 0.0.0.0/0 101*f94098a9SRobert Mustacchiepass 127.0.0.0/8 102*f94098a9SRobert Mustacchiefail 127.0.0.1/8 103*f94098a9SRobert Mustacchiepass 128.0.0.0/1 104*f94098a9SRobert Mustacchiepass 128.0.0.0/2 105*f94098a9SRobert Mustacchiepass 128.0.0.0/3 106*f94098a9SRobert Mustacchiepass 128.0.0.0/4 107*f94098a9SRobert Mustacchiepass 128.0.0.0/5 108*f94098a9SRobert Mustacchiepass 128.0.0.0/6 109*f94098a9SRobert Mustacchiepass 128.0.0.0/7 110*f94098a9SRobert Mustacchiepass 128.0.0.0/8 111*f94098a9SRobert Mustacchiepass 128.0.0.0/9 112*f94098a9SRobert Mustacchiepass 128.0.0.0/10 113*f94098a9SRobert Mustacchiepass 128.0.0.0/11 114*f94098a9SRobert Mustacchiepass 128.0.0.0/12 115*f94098a9SRobert Mustacchiepass 128.0.0.0/13 116*f94098a9SRobert Mustacchiepass 128.0.0.0/14 117*f94098a9SRobert Mustacchiepass 128.0.0.0/15 118*f94098a9SRobert Mustacchiepass 128.0.0.0/16 119*f94098a9SRobert Mustacchiepass 128.0.0.0/17 120*f94098a9SRobert Mustacchiepass 128.0.0.0/18 121*f94098a9SRobert Mustacchiepass 128.0.0.0/19 122*f94098a9SRobert Mustacchiepass 128.0.0.0/20 123*f94098a9SRobert Mustacchiepass 128.0.0.0/21 124*f94098a9SRobert Mustacchiepass 128.0.0.0/22 125*f94098a9SRobert Mustacchiepass 128.0.0.0/23 126*f94098a9SRobert Mustacchiepass 128.0.0.0/24 127*f94098a9SRobert Mustacchiepass 128.0.0.0/25 128*f94098a9SRobert Mustacchiepass 128.0.0.0/26 129*f94098a9SRobert Mustacchiepass 128.0.0.0/27 130*f94098a9SRobert Mustacchiepass 128.0.0.0/28 131*f94098a9SRobert Mustacchiepass 128.0.0.0/29 132*f94098a9SRobert Mustacchiepass 128.0.0.0/30 133*f94098a9SRobert Mustacchiepass 128.0.0.0/21 134*f94098a9SRobert Mustacchiepass 128.0.0.0/32 135*f94098a9SRobert Mustacchi 136*f94098a9SRobert Mustacchiefail 128.0.0.1/2 137*f94098a9SRobert Mustacchiefail 128.0.0.1/4 138*f94098a9SRobert Mustacchiefail 128.0.0.1/8 139*f94098a9SRobert Mustacchiefail 128.0.0.1/10 140*f94098a9SRobert Mustacchiefail 128.0.0.1/12 141*f94098a9SRobert Mustacchiefail 128.0.0.1/14 142*f94098a9SRobert Mustacchiefail 128.0.0.1/16 143*f94098a9SRobert Mustacchiefail 128.0.0.1/18 144*f94098a9SRobert Mustacchiefail 128.0.0.1/20 145*f94098a9SRobert Mustacchiefail 128.0.0.1/22 146*f94098a9SRobert Mustacchiefail 128.0.0.1/24 147*f94098a9SRobert Mustacchiefail 128.0.0.1/28 148*f94098a9SRobert Mustacchiefail 128.0.0.1/30 149*f94098a9SRobert Mustacchiepass 128.0.0.1/32 150*f94098a9SRobert Mustacchi 151*f94098a9SRobert Mustacchiepass 10.0.0.0/30 152*f94098a9SRobert Mustacchiepass 10.0.0.4/30 153*f94098a9SRobert Mustacchiepass 10.0.0.8/30 154*f94098a9SRobert Mustacchiepass 10.0.0.12/30 155*f94098a9SRobert Mustacchiepass 10.0.0.16/30 156*f94098a9SRobert Mustacchiepass 10.0.0.20/30 157*f94098a9SRobert Mustacchi 158*f94098a9SRobert Mustacchiefail 10.0.0.1/30 159*f94098a9SRobert Mustacchiefail 10.0.0.5/30 160*f94098a9SRobert Mustacchiefail 10.0.0.9/30 161*f94098a9SRobert Mustacchiefail 10.0.0.13/30 162*f94098a9SRobert Mustacchiefail 10.0.0.17/30 163*f94098a9SRobert Mustacchiefail 10.0.0.21/30 164*f94098a9SRobert Mustacchi 165*f94098a9SRobert Mustacchiepass 10.99.99.0/24,10.88.88.0/24,10.77.7.0/24 166*f94098a9SRobert Mustacchiepass 10.99.99.7/32,10.168.0.0/16 167*f94098a9SRobert Mustacchi 168*f94098a9SRobert Mustacchiefail 10.99.99.7/33 169*f94098a9SRobert Mustacchiefail 10.99.99.7/-1 170*f94098a9SRobert Mustacchiefail 10.99.99.7/ 171*f94098a9SRobert Mustacchiefail 10.99.99.7/0 172*f94098a9SRobert Mustacchi 173*f94098a9SRobert Mustacchi# Basic IPv6 Addresss 174*f94098a9SRobert Mustacchiefail :: 175*f94098a9SRobert Mustacchiefail 1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1 176*f94098a9SRobert Mustacchiefail dead:beef::gg 177*f94098a9SRobert Mustacchiepass ::1 178*f94098a9SRobert Mustacchiepass ::127.0.0.1 179*f94098a9SRobert Mustacchiepass ::10.0.0.0 180*f94098a9SRobert Mustacchiefail ::0.0.0.0 181*f94098a9SRobert Mustacchiefail ::ffff:0.0.0.0 182*f94098a9SRobert Mustacchiepass ::ffff:10.123.167.169 183*f94098a9SRobert Mustacchiepass 2600:3c00::f03c:91ff:fe96:a264 184*f94098a9SRobert Mustacchi 185*f94098a9SRobert Mustacchi# IPv6 Prefixes 186*f94098a9SRobert Mustacchi 187*f94098a9SRobert Mustacchiefail ::/128 188*f94098a9SRobert Mustacchiefail 2600:3c00::f03c:91ff:fe96:a264/129 189*f94098a9SRobert Mustacchiefail 2600:3c00::f03c:91ff:fe96:a264/-1 190*f94098a9SRobert Mustacchiefail 2600:3c00::f03c:91ff:fe96:a264/- 191*f94098a9SRobert Mustacchiefail 2600:3c00::f03c:91ff:fe96:a264/ 192*f94098a9SRobert Mustacchiefail ::1/1 193*f94098a9SRobert Mustacchiefail ::1/20 194*f94098a9SRobert Mustacchi 195*f94098a9SRobert Mustacchiallv6 196*f94098a9SRobert Mustacchiv6specific 197*f94098a9SRobert Mustacchi 198*f94098a9SRobert Mustacchiepass 2600:3c00::f03c:91ff:fe96:a264/128 199*f94098a9SRobert Mustacchiepass 2600:3c00::/64 200*f94098a9SRobert Mustacchi 201*f94098a9SRobert Mustacchiefail fe80::8:20ff:fead:3361/10 202*f94098a9SRobert Mustacchiefail fe80::1/10 203*f94098a9SRobert Mustacchiepass fe80::/15 204*f94098a9SRobert Mustacchiepass fe82::/15 205*f94098a9SRobert Mustacchi 206*f94098a9SRobert Mustacchicleanup 207*f94098a9SRobert Mustacchiprintf "TEST PASS: $ai_arg0" 208