docs
[mirrors/Programs.git] / bash / dhcp-option.sh
CommitLineData
b118cefd
TM
1#!/bin/bash
2#Experimental BASH script to compile DHCP options
3
4dec_to_hex() {
5 echo 'obase=16; '"$1" | bc
6}
7
8dec_to_hex_right() {
9 echo -n $(while true; do echo -n 0; done | head -c "$2")$(dec_to_hex "$1") | tail -c "$2"
10}
11
12escape() {
d0cc92b7
TM
13 #Adds \x escapes to hexdump string
14
b118cefd
TM
15 while read -n 2 i; do
16 [ -n "$i" ] && echo -n '\x'"$i";
17 done
18}
19
20dnsmasq() {
d0cc92b7
TM
21 #Converts \x00\x00 notation to 00:00 notation
22
b118cefd
TM
23 sed -e 's/^\\x//g' | sed -e 's/\\x/:/g'
24}
25
26dhcp_option() {
d0cc92b7
TM
27 #Compile DHCP option using option number and data.
28 #Generates hex string including header with option number and data length.
29
b118cefd
TM
30 separator='\x'
31 option_id="$1"
32 option_data="$2"
33
34 len=$(echo -n "$option_data" | wc -c)
35 dec_to_hex_right $option_id 2 | escape
36 dec_to_hex_right $len 2 | escape
37 printf "$option_data" | xxd -ps -c 256 | escape
38}
39
eb907e03
TM
40pd_prefix() {
41 #Generate prefix sub-option to be included in PD option of DHCPv6
42
43 option_id=26
44 lifetime_preferred='\x00\x00\x01\x2C'
45 lifetime_valid='\x00\x00\x01\x2C'
46
47 prefix_length='64'
48 #prefix = 16 octets:
49 prefix='\x20\x01\x06\x7c\x21\x90\x1a\x01''\x00\x00\x00\x00\x00\x00\x00\x00'
50
51 prefix_length_hex=$(dec_to_hex $prefix_length)
52
53 #echo $prefix_length_hex
54 dhcp_option $option_id "$lifetime_preferred$lifetime_valid$prefix_length_hex$prefix"
55}
56
b118cefd 57pd() {
eb907e03
TM
58 #Generate data of PF option of DHCPv6
59
b118cefd
TM
60 iaid='\x00\x00\x00\x00'
61 t1='\x00\x00\x01\x2C'
62 t2='\x00\x00\x01\x2C'
eb907e03
TM
63 ia_pd_opts="$(pd_prefix)"
64 echo -n "$iaid$t1$t2$ia_pd_opts"
65}
66
67pd_option() {
68 #Generate PD option of DHCPv6 (including header)
69
70 option_id=25
71 dhcp_option $option_id "$(pd)"
b118cefd
TM
72}
73
74pd | dnsmasq
75echo
This page took 0.199236 seconds and 4 git commands to generate.