1*de1e4e89SAndroid Build Coastguard Worker#!/bin/sh 2*de1e4e89SAndroid Build Coastguard Worker 3*de1e4e89SAndroid Build Coastguard Worker. lib/generic.sh 4*de1e4e89SAndroid Build Coastguard Worker 5*de1e4e89SAndroid Build Coastguard WorkerDEV="$(rand_dev)" 6*de1e4e89SAndroid Build Coastguard Workerts_ip "$0" "Add $DEV dummy interface" link add dev $DEV type dummy 7*de1e4e89SAndroid Build Coastguard Workerts_ip "$0" "Enable $DEV" link set $DEV up 8*de1e4e89SAndroid Build Coastguard Workerts_tc "pedit" "Add ingress qdisc" qdisc add dev $DEV ingress 9*de1e4e89SAndroid Build Coastguard Worker 10*de1e4e89SAndroid Build Coastguard Worker 11*de1e4e89SAndroid Build Coastguard Workerdo_pedit() { 12*de1e4e89SAndroid Build Coastguard Worker ts_tc "pedit" "Drop ingress qdisc" \ 13*de1e4e89SAndroid Build Coastguard Worker qdisc del dev $DEV ingress 14*de1e4e89SAndroid Build Coastguard Worker ts_tc "pedit" "Add ingress qdisc" \ 15*de1e4e89SAndroid Build Coastguard Worker qdisc add dev $DEV ingress 16*de1e4e89SAndroid Build Coastguard Worker ts_tc "pedit" "Add pedit action $*" \ 17*de1e4e89SAndroid Build Coastguard Worker filter add dev $DEV parent ffff: \ 18*de1e4e89SAndroid Build Coastguard Worker u32 match u32 0 0 \ 19*de1e4e89SAndroid Build Coastguard Worker action pedit munge $@ 20*de1e4e89SAndroid Build Coastguard Worker ts_tc "pedit" "Show ingress filters" \ 21*de1e4e89SAndroid Build Coastguard Worker filter show dev $DEV parent ffff: 22*de1e4e89SAndroid Build Coastguard Worker} 23*de1e4e89SAndroid Build Coastguard Worker 24*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u32 set 0x12345678 25*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 12345678 mask 00000000" 26*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u16 set 0x1234 27*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 12340000 mask 0000ffff" 28*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 14 u16 set 0x1234 29*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00001234 mask ffff0000" 30*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 12 u8 set 0x23 31*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 23000000 mask 00ffffff" 32*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 set 0x23 33*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00230000 mask ff00ffff" 34*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 14 u8 set 0x23 35*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00002300 mask ffff00ff" 36*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 15 u8 set 0x23 37*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00000023 mask ffffff00" 38*de1e4e89SAndroid Build Coastguard Worker 39*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 invert 40*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00ff0000 mask ffffffff" 41*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 clear 42*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00000000 mask ff00ffff" 43*de1e4e89SAndroid Build Coastguard Workerdo_pedit offset 13 u8 preserve 44*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00000000 mask ffffffff" 45*de1e4e89SAndroid Build Coastguard Worker 46*de1e4e89SAndroid Build Coastguard Worker# the following set of tests has been auto-generated by running this little 47*de1e4e89SAndroid Build Coastguard Worker# shell script: 48*de1e4e89SAndroid Build Coastguard Worker# 49*de1e4e89SAndroid Build Coastguard Worker# do_it() { 50*de1e4e89SAndroid Build Coastguard Worker# echo "do_pedit $@" 51*de1e4e89SAndroid Build Coastguard Worker# tc qd del dev veth0 ingress >/dev/null 2>&1 52*de1e4e89SAndroid Build Coastguard Worker# tc qd add dev veth0 ingress >/dev/null 2>&1 53*de1e4e89SAndroid Build Coastguard Worker# tc filter add dev veth0 parent ffff: u32 \ 54*de1e4e89SAndroid Build Coastguard Worker# match u32 0 0 \ 55*de1e4e89SAndroid Build Coastguard Worker# action pedit munge $@ >/dev/null 2>&1 56*de1e4e89SAndroid Build Coastguard Worker# tc filter show dev veth0 parent ffff: | \ 57*de1e4e89SAndroid Build Coastguard Worker# sed -n 's/^[\t ]*\(key #0.*\)/test_on "\1"/p' 58*de1e4e89SAndroid Build Coastguard Worker# } 59*de1e4e89SAndroid Build Coastguard Worker# 60*de1e4e89SAndroid Build Coastguard Worker# do_it_all() { # (field, val1 [, val2, ...]) 61*de1e4e89SAndroid Build Coastguard Worker# local field=$1 62*de1e4e89SAndroid Build Coastguard Worker# shift 63*de1e4e89SAndroid Build Coastguard Worker# for val in $@; do 64*de1e4e89SAndroid Build Coastguard Worker# do_it ip $field set $val 65*de1e4e89SAndroid Build Coastguard Worker# done 66*de1e4e89SAndroid Build Coastguard Worker# for i in preserve invert clear; do 67*de1e4e89SAndroid Build Coastguard Worker# do_it ip $field $i 68*de1e4e89SAndroid Build Coastguard Worker# done 69*de1e4e89SAndroid Build Coastguard Worker# } 70*de1e4e89SAndroid Build Coastguard Worker# 71*de1e4e89SAndroid Build Coastguard Worker# do_it_all ihl 0x04 0x40 72*de1e4e89SAndroid Build Coastguard Worker# do_it_all src 1.2.3.4 73*de1e4e89SAndroid Build Coastguard Worker# do_it_all dst 1.2.3.4 74*de1e4e89SAndroid Build Coastguard Worker# do_it_all tos 0x1 0x10 75*de1e4e89SAndroid Build Coastguard Worker# do_it_all protocol 0x23 76*de1e4e89SAndroid Build Coastguard Worker# do_it_all nofrag 0x23 0xf4 77*de1e4e89SAndroid Build Coastguard Worker# do_it_all firstfrag 0x03 0xfa 78*de1e4e89SAndroid Build Coastguard Worker# do_it_all ce 0x23 0x04 0xf3 79*de1e4e89SAndroid Build Coastguard Worker# do_it_all df 0x23 0x04 0xf3 80*de1e4e89SAndroid Build Coastguard Worker# do_it_all mf 0x23 0x04 0xf3 81*de1e4e89SAndroid Build Coastguard Worker# do_it_all dport 0x1234 82*de1e4e89SAndroid Build Coastguard Worker# do_it_all sport 0x1234 83*de1e4e89SAndroid Build Coastguard Worker# do_it_all icmp_type 0x23 84*de1e4e89SAndroid Build Coastguard Worker# do_it_all icmp_code 0x23 85*de1e4e89SAndroid Build Coastguard Worker 86*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl set 0x04 87*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 04000000 mask f0ffffff" 88*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl set 0x40 89*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00000000 mask f0ffffff" 90*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl preserve 91*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00000000 mask ffffffff" 92*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl invert 93*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 0f000000 mask ffffffff" 94*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ihl clear 95*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00000000 mask f0ffffff" 96*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src set 1.2.3.4 97*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 01020304 mask 00000000" 98*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src preserve 99*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00000000 mask ffffffff" 100*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src invert 101*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val ffffffff mask ffffffff" 102*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip src clear 103*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 12: val 00000000 mask 00000000" 104*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst set 1.2.3.4 105*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 16: val 01020304 mask 00000000" 106*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst preserve 107*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 16: val 00000000 mask ffffffff" 108*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst invert 109*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 16: val ffffffff mask ffffffff" 110*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dst clear 111*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 16: val 00000000 mask 00000000" 112*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos set 0x1 113*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00010000 mask ff00ffff" 114*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos set 0x10 115*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00100000 mask ff00ffff" 116*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos preserve 117*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00000000 mask ffffffff" 118*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos invert 119*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00ff0000 mask ffffffff" 120*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip tos clear 121*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 0: val 00000000 mask ff00ffff" 122*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol set 0x23 123*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 8: val 00230000 mask ff00ffff" 124*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol preserve 125*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 8: val 00000000 mask ffffffff" 126*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol invert 127*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 8: val 00ff0000 mask ffffffff" 128*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip protocol clear 129*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 8: val 00000000 mask ff00ffff" 130*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag set 0x23 131*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00002300 mask ffffc0ff" 132*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag set 0xf4 133*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00003400 mask ffffc0ff" 134*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag preserve 135*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffffff" 136*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag invert 137*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00003f00 mask ffffffff" 138*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip nofrag clear 139*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffc0ff" 140*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag set 0x03 141*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000300 mask ffffe0ff" 142*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag set 0xfa 143*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00001a00 mask ffffe0ff" 144*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag preserve 145*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffffff" 146*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag invert 147*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00001f00 mask ffffffff" 148*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip firstfrag clear 149*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffe0ff" 150*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0x23 151*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffff7fff" 152*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0x04 153*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffff7fff" 154*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce set 0xf3 155*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00008000 mask ffff7fff" 156*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce preserve 157*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffffff" 158*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce invert 159*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00008000 mask ffffffff" 160*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip ce clear 161*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffff7fff" 162*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0x23 163*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffbfff" 164*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0x04 165*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffbfff" 166*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df set 0xf3 167*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00004000 mask ffffbfff" 168*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df preserve 169*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffffff" 170*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df invert 171*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00004000 mask ffffffff" 172*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip df clear 173*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffbfff" 174*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0x23 175*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00002000 mask ffffdfff" 176*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0x04 177*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffdfff" 178*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf set 0xf3 179*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00002000 mask ffffdfff" 180*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf preserve 181*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffffff" 182*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf invert 183*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00002000 mask ffffffff" 184*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip mf clear 185*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 4: val 00000000 mask ffffdfff" 186*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport set 0x1234 187*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00001234 mask ffff0000" 188*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport preserve 189*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask ffffffff" 190*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport invert 191*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 0000ffff mask ffffffff" 192*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip dport clear 193*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask ffff0000" 194*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport set 0x1234 195*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 12340000 mask 0000ffff" 196*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport preserve 197*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask ffffffff" 198*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport invert 199*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val ffff0000 mask ffffffff" 200*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip sport clear 201*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask 0000ffff" 202*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type set 0x23 203*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 23000000 mask 00ffffff" 204*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type preserve 205*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask ffffffff" 206*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type invert 207*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val ff000000 mask ffffffff" 208*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_type clear 209*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask 00ffffff" 210*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code set 0x23 211*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 23000000 mask 00ffffff" 212*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code preserve 213*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask ffffffff" 214*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code invert 215*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val ff000000 mask ffffffff" 216*de1e4e89SAndroid Build Coastguard Workerdo_pedit ip icmp_code clear 217*de1e4e89SAndroid Build Coastguard Workertest_on "key #0 at 20: val 00000000 mask 00ffffff" 218