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