# Test basic IP protocol access functionality
popen ip net /dev/pcelx0
pclose ip net
popen ip net /dev/pcelx0
puts "PASS: popen"
pinit ip pkt0
puts "PASS: pinit"
pset pkt0 ip dst 0x7f000001
puts "PASS: pset ip dst from integer"
pset pkt0 ip src [ip.h2a picadilly]
puts "PASS: pset pkt0 ip src from symbollic name"
set a [pget pkt0 ip dst]
passert "$a == 0x7f000001" "Format of IP src address unexpected"
# Set each field to zero
set a [pset pkt0 ip hlv 1]
set a [pset pkt0 ip tos 1]
set a [pset pkt0 ip len 1]
set a [pset pkt0 ip id 1]
set a [pset pkt0 ip off 1]
set a [pset pkt0 ip ttl 1]
set a [pset pkt0 ip proto 1]
set a [pset pkt0 ip sum 1]
set a [pset pkt0 ip src 1]
set a [pset pkt0 ip dst 1]
# Try a get for each field
set a [pget pkt0 ip src]
passert "$a == 1" "IP src address incorrect"
set a [pget pkt0 ip hlv]
passert "$a == 1" "hl/v incorect"
set a [pget pkt0 ip tos]
passert "$a == 1" "tos incorrect"
set a [pget pkt0 ip len]
passert "$a == 1" "len incorrect"
set a [pget pkt0 ip id]
passert "$a == 1" "IP id incorrect"
set a [pget pkt0 ip off]
passert "$a == 1" "IP offset incorrect"
set a [pget pkt0 ip ttl]
passert "$a == 1" "IP ttl incorrect"
set a [pget pkt0 ip proto]
passert [string match $a "icmp"] "IP protocol incorrect"
set a [pget pkt0 ip sum]
passert "$a == 1" "IP checksum incorrect"
puts "PASS: pget"
set b [plist pkt0]
set null ""
passert [string compare {$b} {$null}] "Plist output is NULL"
puts "PASS: plist"
#
# Compose a sensible packet and send it.
#
pset pkt0 ip src [ip.h2a specter]
pset pkt0 ip dst [ip.h2a picadilly]
pset pkt0 ip proto udp
pset pkt0 ip ttl 40
pset pkt0 ip id 42
pset pkt0 ip tos 0
# pset pkt0 ip len 20
pset pkt0 ip len 40
pset pkt0 ip hlv 0x45
pset pkt0 ip off 0
pset pkt0 ip sum 0
puts [plist pkt0]
net.send pkt0
puts "PASS: send a packet"
pclose ip net
puts "PASS: pclose"
