Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/libexec/bootpd/ConvOldTab.sh
34823 views
1
#!/bin/sh
2
# convert_bootptab [email protected] 02/25/94
3
# This script can be used to convert bootptab files in old format
4
# to new (termcap-like) bootptab files
5
#
6
# The old format - real entries are commented out by '###'
7
#
8
# Old-style bootp files consist of two sections.
9
# The first section has two entries:
10
# First, a line that specifies the home directory
11
# (where boot file paths are relative to)
12
13
###/tftpboot
14
15
# The next non-empty non-comment line specifies the default bootfile
16
17
###no-file
18
19
# End of first section - indicated by '%%' at the start of the line
20
21
###%%
22
23
# The remainder of this file contains one line per client
24
# interface with the information shown by the table headings
25
# below. The host name is also tried as a suffix for the
26
# bootfile when searching the home directory (that is,
27
# bootfile.host)
28
#
29
# Note that htype is always 1, indicating the hardware type Ethernet.
30
# Conversion therefore always yields ':ha=ether:'.
31
#
32
# host htype haddr iaddr bootfile
33
#
34
35
###somehost 1 00:0b:ad:01:de:ad 128.128.128.128 dummy
36
37
# That's all for the description of the old format.
38
# For the new-and-improved format, see bootptab(5).
39
40
set -u$DX
41
42
case $#
43
in 2 ) OLDTAB=$1 ; NEWTAB=$2 ;;
44
* ) echo "Usage: `basename $0` <Input> <Output>"
45
exit 1
46
esac
47
48
if [ ! -r $OLDTAB ]
49
then
50
echo "`basename $0`: $OLDTAB does not exist or is unreadable."
51
exit 1
52
fi
53
54
if touch $NEWTAB 2> /dev/null
55
then
56
:
57
else
58
echo "`basename $0`: cannot write to $NEWTAB."
59
exit 1
60
fi
61
62
63
cat << END_OF_HEADER >> $NEWTAB
64
# /etc/bootptab: database for bootp server (/etc/bootpd)
65
# This file was generated automagically
66
67
# Blank lines and lines beginning with '#' are ignored.
68
#
69
# Legend: (see bootptab.5)
70
# first field -- hostname (not indented)
71
# bf -- bootfile
72
# bs -- bootfile size in 512-octet blocks
73
# cs -- cookie servers
74
# df -- dump file name
75
# dn -- domain name
76
# ds -- domain name servers
77
# ef -- extension file
78
# gw -- gateways
79
# ha -- hardware address
80
# hd -- home directory for bootfiles
81
# hn -- host name set for client
82
# ht -- hardware type
83
# im -- impress servers
84
# ip -- host IP address
85
# lg -- log servers
86
# lp -- LPR servers
87
# ns -- IEN-116 name servers
88
# ra -- reply address
89
# rl -- resource location protocol servers
90
# rp -- root path
91
# sa -- boot server address
92
# sm -- subnet mask
93
# sw -- swap server
94
# tc -- template host (points to similar host entry)
95
# td -- TFTP directory
96
# to -- time offset (seconds)
97
# ts -- time servers
98
# vm -- vendor magic number
99
# Tn -- generic option tag n
100
#
101
# Be careful about including backslashes where they're needed. Weird (bad)
102
# things can happen when a backslash is omitted where one is intended.
103
# Also, note that generic option data must be either a string or a
104
# sequence of bytes where each byte is a two-digit hex value.
105
106
# First, we define a global entry which specifies the stuff every host uses.
107
# (Host name lookups are relative to the domain: your.domain.name)
108
109
END_OF_HEADER
110
111
# Fix up HW addresses in aa:bb:cc:dd:ee:ff and aa-bb-cc-dd-ee-ff style first
112
# Then awk our stuff together
113
sed -e 's/[:-]//g' < $OLDTAB | \
114
nawk 'BEGIN { PART = 0 ; FIELD=0 ; BOOTPATH="unset" ; BOOTFILE="unset" }
115
/^%%/ {
116
PART = 1
117
printf ".default:\\\n\t:ht=ether:\\\n\t:hn:\\\n\t:dn=your.domain.name:\\\n\t:ds=your,dns,servers:\\\n\t:sm=255.255.0.0:\\\n\t:hd=%s:\\\n\t:rp=%s:\\\n\t:td=%s:\\\n\t:bf=%s:\\\n\t:to=auto:\n\n", BOOTPATH, BOOTPATH, BOOTPATH, BOOTFILE
118
next
119
}
120
/^$/ { next }
121
/^#/ { next }
122
{
123
if ( PART == 0 && FIELD < 2 )
124
{
125
if ( FIELD == 0 ) BOOTPATH=$1
126
if ( FIELD == 1 ) BOOTFILE=$1
127
FIELD++
128
}
129
}
130
{
131
if ( PART == 1 )
132
{
133
HOST=$1
134
HA=$3
135
IP=$4
136
BF=$5
137
printf "%s:\\\n\t:tc=.default:\\\n\t:ha=0x%s:\\\n\t:ip=%s:\\\n\t:bf=%s:\n", HOST, HA, IP, BF
138
}
139
}' >> $NEWTAB
140
141
exit 0
142
143