3 # Copyright (c) 2010 iXsystems, Inc. All rights reserved.
4 # Copyright (c) 2011 The FreeBSD Foundation
7 # Portions of this software were developed by Bjoern Zeeb
8 # under sponsorship from the FreeBSD Foundation.
10 # Redistribution and use in source and binary forms, with or without
11 # modification, are permitted provided that the following conditions
13 # 1. Redistributions of source code must retain the above copyright
14 # notice, this list of conditions and the following disclaimer.
15 # 2. Redistributions in binary form must reproduce the above copyright
16 # notice, this list of conditions and the following disclaimer in the
17 # documentation and/or other materials provided with the distribution.
19 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 # Functions which perform our networking setup
35 # Function which creates a kde4 .desktop file for the PC-BSD net tray
36 create_desktop_nettray()
39 echo "#!/usr/bin/env xdg-open
41 Exec=/usr/local/kde4/bin/pc-nettray ${NIC}
44 Type=Application" > ${FSMNT}/usr/share/skel/.kde4/Autostart/tray-${NIC}.desktop
45 chmod 744 ${FSMNT}/usr/share/skel/.kde4/Autostart/tray-${NIC}.desktop
49 # Function which checks is a nic is wifi or not
53 ifconfig ${NIC} | grep -q "802.11" 2>/dev/null
62 # Function to get the first available wired nic, used for setup
65 rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null
66 # start by getting a list of nics on this system
67 ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist
68 if [ -e "${TMPDIR}/.niclist" ]
72 NIC="`echo $line | cut -d ':' -f 1`"
79 done < ${TMPDIR}/.niclist
87 # Function which simply enables plain dhcp on all detected nics
90 rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null
91 # start by getting a list of nics on this system
92 ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist
93 if [ -e "${TMPDIR}/.niclist" ]
95 echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf
99 NIC="`echo $line | cut -d ':' -f 1`"
100 DESC="`echo $line | cut -d ':' -f 2`"
101 echo_log "Setting $NIC to DHCP on the system."
105 # We have a wifi device, setup a wlan* entry for it
106 WLAN="wlan${WLANCOUNT}"
107 cat ${FSMNT}/etc/rc.conf | grep -q "wlans_${NIC}="
108 if [ $? -ne 0 ] ; then
109 echo "wlans_${NIC}=\"${WLAN}\"" >>${FSMNT}/etc/rc.conf
111 echo "ifconfig_${WLAN}=\"DHCP\"" >>${FSMNT}/etc/rc.conf
113 WLANCOUNT=$((WLANCOUNT+1))
115 echo "ifconfig_${NIC}=\"DHCP\"" >>${FSMNT}/etc/rc.conf
119 done < ${TMPDIR}/.niclist
124 # Function which detects available nics, and enables dhcp on them
130 # Function which simply enables iPv6 SLAAC on all detected nics
133 rm ${TMPDIR}/.niclist >/dev/null 2>/dev/null
134 # start by getting a list of nics on this system
135 ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist
136 if [ -e "${TMPDIR}/.niclist" ]
138 echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf
142 NIC="`echo $line | cut -d ':' -f 1`"
143 DESC="`echo $line | cut -d ':' -f 2`"
144 echo_log "Setting $NIC to accepting RAs on the system."
148 # We have a wifi device, setup a wlan* entry for it
149 # Given we cannot have DHCP and SLAAC the same time currently
150 # it's save to just duplicate.
151 WLAN="wlan${WLANCOUNT}"
152 cat ${FSMNT}/etc/rc.conf | grep -q "wlans_${NIC}="
153 if [ $? -ne 0 ] ; then
154 echo "wlans_${NIC}=\"${WLAN}\"" >>${FSMNT}/etc/rc.conf
156 #echo "ifconfig_${NIC}=\"up\"" >>${FSMNT}/etc/rc.conf
157 echo "ifconfig_${WLAN}_ipv6=\"inet6 accept_rtadv\"" >>${FSMNT}/etc/rc.conf
159 WLANCOUNT=$((WLANCOUNT+1))
161 #echo "ifconfig_${NIC}=\"up\"" >>${FSMNT}/etc/rc.conf
162 echo "ifconfig_${NIC}_ipv6=\"inet6 accept_rtadv\"" >>${FSMNT}/etc/rc.conf
166 done < ${TMPDIR}/.niclist
169 # Given we cannot yet rely on RAs to provide DNS information as much
170 # as we can in the DHCP world, we should append a given nameserver.
171 : > ${FSMNT}/etc/resolv.conf
172 get_value_from_cfg netSaveIPv6NameServer
174 if [ -n "${NAMESERVER}" ]
176 echo "nameserver ${NAMESERVER}" >>${FSMNT}/etc/resolv.conf
182 # Function which detects available nics, and enables IPv6 SLAAC on them
189 # Function which saves a manual nic setup to the installed system
195 get_value_from_cfg netSaveIP_${NIC}
198 if [ "$NETIP" = "DHCP" ]
200 echo_log "Setting $NIC to DHCP on the system."
201 echo "ifconfig_${NIC}=\"DHCP\"" >>${FSMNT}/etc/rc.conf
205 # If we get here, we have a manual setup, lets do so now
212 IFARGS="inet ${NETIP}"
214 # Check if we have a netmask to set
215 get_value_from_cfg netSaveMask_${NIC}
217 if [ -n "${NETMASK}" ]
219 IFARGS="${IFARGS} netmask ${NETMASK}"
223 get_value_from_cfg netSaveIPv6_${NIC}
225 if [ -n "${NETIP6}" ]
227 # Make sure we have one inet6 prefix.
228 IF6ARGS=`echo "${NETIP6}" | awk '{ if ("^inet6 ") { print $0; } else
229 { printf "inet6 %s", $0; } }'`
232 echo "# Auto-Enabled NICs from pc-sysinstall" >>${FSMNT}/etc/rc.conf
233 if [ -n "${IFARGS}" ]
235 echo "ifconfig_${NIC}=\"${IFARGS}\"" >>${FSMNT}/etc/rc.conf
237 if [ -n "${IF6ARGS}" ]
239 echo "ifconfig_${NIC}_ipv6=\"${IF6ARGS}\"" >>${FSMNT}/etc/rc.conf
244 # Function which saves a manual gateway router setup to the installed system
248 # Check if we have a default router to set
249 get_value_from_cfg netSaveDefaultRouter
251 if [ -n "${NETROUTE}" ]
253 echo "defaultrouter=\"${NETROUTE}\"" >>${FSMNT}/etc/rc.conf
255 get_value_from_cfg netSaveIPv6DefaultRouter
257 if [ -n "${NETROUTE}" ]
259 echo "ipv6_defaultrouter=\"${NETROUTE}\"" >>${FSMNT}/etc/rc.conf
264 save_manual_nameserver()
266 # Check if we have a nameserver to enable
267 : > ${FSMNT}/etc/resolv.conf
268 get_value_from_cfg_with_spaces netSaveNameServer
269 NAMESERVERLIST="${VAL}"
270 if [ ! -z "${NAMESERVERLIST}" ]
272 for NAMESERVER in ${NAMESERVERLIST}
274 echo "nameserver ${NAMESERVER}" >>${FSMNT}/etc/resolv.conf
278 get_value_from_cfg_with_spaces netSaveIPv6NameServer
279 NAMESERVERLIST="${VAL}"
280 if [ ! -z "${NAMESERVERLIST}" ]
282 for NAMESERVER in ${NAMESERVERLIST}
284 echo "nameserver ${NAMESERVER}" >>${FSMNT}/etc/resolv.conf
290 # Function which determines if a nic is active / up
293 ifconfig ${1} | grep -q "status: active" 2>/dev/null
294 if [ $? -eq 0 ] ; then
302 # Function which detects available nics, and runs DHCP on them until
306 # start by getting a list of nics on this system
307 ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist
310 NIC="`echo $line | cut -d ':' -f 1`"
311 DESC="`echo $line | cut -d ':' -f 2`"
313 is_nic_active "${NIC}"
314 if [ $? -eq 0 ] ; then
315 echo_log "Trying DHCP on $NIC $DESC"
316 dhclient ${NIC} >/dev/null 2>/dev/null
317 if [ $? -eq 0 ] ; then
318 # Got a valid DHCP IP, we can return now
323 done < ${TMPDIR}/.niclist
327 # Function which detects available nics, and runs rtsol on them.
331 # start by getting a list of nics on this system
332 ${QUERYDIR}/detect-nics.sh > ${TMPDIR}/.niclist
336 NIC="`echo $line | cut -d ':' -f 1`"
337 DESC="`echo $line | cut -d ':' -f 2`"
339 is_nic_active "${NIC}"
340 if [ $? -eq 0 ] ; then
341 echo_log "Will try IPv6 SLAAC on $NIC $DESC"
342 ifconfig ${NIC} inet6 -ifdisabled accept_rtadv up
343 ALLNICS="${ALLNICS} ${NIC}"
345 done < ${TMPDIR}/.niclist
347 # XXX once we support it in-tree call /sbin/resovconf here.
348 echo_log "Running rtsol on ${ALLNICS}"
349 rtsol -F ${ALLNICS} >/dev/null 2>/dev/null
352 # Get the mac address of a target NIC
355 FOUNDMAC="`ifconfig ${1} | grep 'ether' | tr -d '\t' | cut -d ' ' -f 2`"
359 # Function which performs the manual setup of a target nic in the cfg
365 # Check that this NIC exists
366 rc_halt "ifconfig ${NIC}"
368 get_value_from_cfg netIP
371 if [ "$NETIP" = "DHCP" ]
373 echo_log "Enabling DHCP on $NIC"
374 rc_halt "dhclient ${NIC}"
378 # If we get here, we have a manual setup, lets do so now
385 # Check if we have a netmask to set
386 get_value_from_cfg netMask
388 if [ -n "${NETMASK}" ]
390 rc_halt "ifconfig inet ${NIC} netmask ${NETMASK}"
392 rc_halt "ifconfig inet ${NIC} ${NETIP}"
396 # Check if we have a default router to set
397 get_value_from_cfg netDefaultRouter
399 if [ -n "${NETROUTE}" ]
401 rc_halt "route add -inet default ${NETROUTE}"
406 # Set static IPv6 address
407 get_value_from_cfg netIPv6
411 rc_halt "ifconfig inet6 ${NIC} ${NETIP} -ifdisabled up"
415 get_value_from_cfg netIPv6DefaultRouter
417 if [ -n "${NETROUTE}" ]
419 rc_halt "route add -inet6 default ${NETROUTE}"
422 # Check if we have a nameserver to enable
424 get_value_from_cfg netNameServer
426 if [ -n "${NAMESERVER}" ]
428 echo "nameserver ${NAMESERVER}" >>/etc/resolv.conf
430 get_value_from_cfg netIPv6NameServer
432 if [ -n "${NAMESERVER}" ]
434 echo "nameserver ${NAMESERVER}" >>/etc/resolv.conf
440 # Function which parses the cfg and enables networking per specified
443 # Check if we have any networking requested
444 get_value_from_cfg netDev
451 if [ "$NETDEV" = "AUTO-DHCP" ]
454 elif [ "$NETDEV" = "IPv6-SLAAC" ]
457 elif [ "$NETDEV" = "AUTO-DHCP-SLAAC" ]
462 enable_manual_nic ${NETDEV}
468 # Function which checks the cfg and enables the specified networking on
469 # the installed system
470 save_networking_install()
473 # Check if we have any networking requested to save
474 get_value_from_cfg_with_spaces netSaveDev
481 if [ "$NETDEVLIST" = "AUTO-DHCP" ]
484 elif [ "$NETDEVLIST" = "IPv6-SLAAC" ]
487 elif [ "$NETDEVLIST" = "AUTO-DHCP-SLAAC" ]
492 for NETDEV in ${NETDEVLIST}
494 save_manual_nic ${NETDEV}
497 save_manual_nameserver