@@ -535,7 +535,7 @@ if [ "${vnet}" = "1" ]; then
535
535
# for vnet we can make another action
536
536
. ${subrdir}/vnet.subr
537
537
538
- interfaces=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite SELECT name FROM jailnic | while read _int; do
538
+ interfaces=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite " SELECT name FROM jailnic" | while read _int; do
539
539
printf "${_int} "
540
540
done ) || err 1 "${N1_COLOR}jstart: error get interfaces name for vnet nic map${N0_COLOR}"
541
541
@@ -544,13 +544,38 @@ if [ "${vnet}" = "1" ]; then
544
544
545
545
for i in ${interfaces}; do
546
546
547
+ tmp_type=${i%%#*} # cut all after '#'
548
+ tmp_iface=${i##*#} # cut all before '#'
549
+
550
+ case "${tmp_type}" in
551
+ ppt|epair|ovs)
552
+ nic_type="${tmp_type}"
553
+ i="${tmp_iface}"
554
+ ;;
555
+ *)
556
+ nic_type="epair" # epair by default
557
+ true
558
+ ;;
559
+ esac
560
+
561
+ case "${tmp_iface}" in
562
+ epair*)
563
+ nic_type="epair"
564
+ ;;
565
+ *)
566
+ nic_type="ppt"
567
+ ;;
568
+ esac
569
+
570
+ unset tmp_type tmp_type
571
+
547
572
nic_hwaddr=
548
573
nic_parent=
549
574
nic_address=
550
575
_A=
551
- _A=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite SELECT nic_parent,nic_address,nic_hwaddr FROM jailnic WHERE name=\" ${i}\ " )
576
+ _A=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite " SELECT nic_parent,nic_address,nic_hwaddr FROM jailnic WHERE name=' ${i}' " )
552
577
sqllist "${_A}" nic_parent nic_address nic_hwaddr
553
- #nic_parent=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite SELECT nic_parent FROM jailnic WHERE name=\" ${i}\ " )
578
+ #nic_parent=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite " SELECT nic_parent FROM jailnic WHERE name=' ${i}' " )
554
579
555
580
# when ip=0 and interface=auto we must use default interface for upstream
556
581
[ "${nic_parent}" = "0" -o "${nic_parent}" = "auto" ] && nic_parent=$( getnics-by-ip ip=0.0.0.0 skip=bridge )
@@ -586,14 +611,23 @@ if [ "${vnet}" = "1" ]; then
586
611
fi
587
612
esac
588
613
589
- myepair=$( get_my_epair ${mybridge} )
590
- [ $? -eq 1 ] && err 1 "${N1_COLOR}Error: Cant get_my_epair by: ${N2_COLOR}${mybridge}${N0_COLOR}"
591
- if [ -z "${epairb_list}" ]; then
592
- epaira_list="${myepair}a"
593
- epairb_list="${myepair}b"
614
+ if [ "${nic_type}" = "ppt" ]; then
615
+ myepair="${i}"
616
+ if [ -z "${epairb_list}" ]; then
617
+ epairb_list="${myepair}"
618
+ else
619
+ epairb_list="${epairb_list},${myepair}b"
620
+ fi
594
621
else
595
- epaira_list="${epaira_list},${myepair}a"
596
- epairb_list="${epairb_list},${myepair}b"
622
+ myepair=$( get_my_epair ${mybridge} )
623
+ [ $? -eq 1 ] && err 1 "${N1_COLOR}Error: Cant get_my_epair by: ${N2_COLOR}${mybridge}${N0_COLOR}"
624
+ if [ -z "${epairb_list}" ]; then
625
+ epaira_list="${myepair}a"
626
+ epairb_list="${myepair}b"
627
+ else
628
+ epaira_list="${epaira_list},${myepair}a"
629
+ epairb_list="${epairb_list},${myepair}b"
630
+ fi
597
631
fi
598
632
599
633
case "${nic_parent}" in
@@ -609,7 +643,7 @@ if [ "${vnet}" = "1" ]; then
609
643
_vale_arg=$( substr --pos=0 --len=${_pos} --str="${nic_parent}" )
610
644
_sw=$( substr --pos=$(( ${_pos} +2 )) --len=${_pref} --str="${nic_parent}" )
611
645
fi
612
- valeid=$( cbsdsqlro local SELECT idx FROM vale WHERE name=\" ${_sw}\ " )
646
+ valeid=$( cbsdsqlro local " SELECT idx FROM vale WHERE name=' ${_sw}' " )
613
647
[ -z "${valeid}" ] && log_err 1 "${N1_COLOR}${CBSD_APP}: can't determine vale nic for: ${nic_parent}, sw: ${_sw}${N0_COLOR}"
614
648
#mytap="vale${valeid}:${jname}"
615
649
cbsdlogger NOTICE "${CBSD_APP}: vale switch id: ${valeid} (vale${valeid})"
@@ -618,24 +652,49 @@ if [ "${vnet}" = "1" ]; then
618
652
esac
619
653
620
654
printf "${H3_COLOR}${myepair}:${N2_COLOR}${nic_parent} "
621
- ${IFCONFIG_CMD} ${myepair}a description ${jname}-eth${eth_seq} up
655
+
656
+ case "${nic_type}" in
657
+ ppt)
658
+ #${IFCONFIG_CMD} ${myepair} description ${jname}-eth${eth_seq} up
659
+ ${IFCONFIG_CMD} ${myepair} description ${jname}-${myepair} up
660
+ ;;
661
+ *)
662
+ ${IFCONFIG_CMD} ${myepair}a description ${jname}-eth${eth_seq} up
663
+ ;;
664
+ esac
665
+
622
666
eth_seq=$(( eth_seq + 1 ))
623
- TRAP="${TRAP} ${IFCONFIG_CMD} ${myepair}a destroy;"
624
- trap "${TRAP}" HUP INT ABRT BUS TERM EXIT
625
667
626
- #nic_hwaddr=$( cbsdsqlro ${jailsysdir}/${jname}/local.sqlite SELECT nic_hwaddr FROM jailnic WHERE name=\"${i}\" )
668
+ case "${nic_type}" in
669
+ ppt)
670
+ true
671
+ # TRAP="${TRAP} ${IFCONFIG_CMD} eth${eth_seq} name ${myepair};"
672
+ # trap "${TRAP}" HUP INT ABRT BUS TERM EXIT
673
+ ;;
674
+ *)
675
+ TRAP="${TRAP} ${IFCONFIG_CMD} ${myepair}a destroy;"
676
+ trap "${TRAP}" HUP INT ABRT BUS TERM EXIT
677
+ ;;
678
+ esac
627
679
628
680
# MAC MGMT
629
681
if [ "${nic_hwaddr}" = "0" ]; then
630
682
nic_hwaddr=$( mac_gen 00:a0:98 )
631
- cbsdsqlrw ${jailsysdir}/${jname}/local.sqlite "UPDATE jailnic SET nic_hwaddr=\" ${nic_hwaddr}\" WHERE name=\" ${i}\" "
683
+ cbsdsqlrw ${jailsysdir}/${jname}/local.sqlite "UPDATE jailnic SET nic_hwaddr=' ${nic_hwaddr}' WHERE name=' ${i}' "
632
684
fi
633
685
634
- cbsdlogger NOTICE ${CBSD_APP}: jail ${jname}: set hwaddr for vnet interface ${myepair}b: ${nic_hwaddr}
635
- ${IFCONFIG_CMD} ${myepair}b ether ${nic_hwaddr}
636
- if [ "${nic_address}" != "0" ]; then
637
- ${IFCONFIG_CMD} ${myepair}a inet ${nic_address} up
638
- fi
686
+ case "${nic_type}" in
687
+ ppt)
688
+ cbsdlogger NOTICE ${CBSD_APP}: jail ${jname}: set hwaddr for vnet interface ${myepair}: ${nic_hwaddr}
689
+ ${IFCONFIG_CMD} ${myepair} ether ${nic_hwaddr}
690
+ ;;
691
+ *)
692
+ cbsdlogger NOTICE ${CBSD_APP}: jail ${jname}: set hwaddr for vnet interface ${myepair}b: ${nic_hwaddr}
693
+ ${IFCONFIG_CMD} ${myepair}b ether ${nic_hwaddr}
694
+ if [ "${nic_address}" != "0" ]; then
695
+ ${IFCONFIG_CMD} ${myepair}a inet ${nic_address} up
696
+ fi
697
+ esac
639
698
done
640
699
641
700
[ ${quiet} -ne 1 ] && ${ECHO} "${N0_COLOR}"
@@ -824,6 +883,7 @@ case "${platform}" in
824
883
;;
825
884
*)
826
885
cbsdlogger NOTICE ${CBSD_APP}: ${CPUSET} /usr/local/cbsd/misc/daemonize -p ${ftmpdir}/jstart.${jname}.$$ /usr/bin/nice -n ${nice} ${JAIL_CMD} -f ${ftmpdir}/${jname}.conf -c ${jname}
886
+ echo "${JAIL_CMD} -f ${ftmpdir}/${jname}.conf -c ${jname}"
827
887
case "${quiet}" in
828
888
0)
829
889
${CPUSET} /usr/local/cbsd/misc/daemonize -p ${ftmpdir}/jstart.${jname}.$$ /usr/bin/nice -n ${nice} ${JAIL_CMD} -f ${ftmpdir}/${jname}.conf -c ${jname}
@@ -861,45 +921,53 @@ if [ ${vnet} -eq 1 ]; then
861
921
OIFS="${IFS}"
862
922
IFS=","
863
923
eth_seq=0
924
+ int_iface=
864
925
for i in ${epairb_list}; do
865
926
[ -z "${i}" ] && continue
866
927
IFS="${OIFS}"
867
928
${IFCONFIG_CMD} ${i} up
868
929
# we need setup lock here due to ethX name possible conflict with other jail
869
930
_wait_count=0
870
- while [ -r ${tmpdir}/eth${eth_seq}.locked ]; do
871
-
872
- _cur_time=$( ${DATE_CMD} +%s )
873
- eval $( ${STAT_CMD} -s ${tmpdir}/eth${eth_seq}.locked )
874
- _diff_time=$(( _cur_time - st_mtime ))
875
-
876
- if [ ${_diff_time} -gt 8 ]; then
877
- ${IFCONFIG_CMD} eth${eth_seq} > /dev/null 2>&1
878
- _ret=$?
879
- if [ ${_ret} -ne 0 ]; then
880
- # remove orphaned lock
881
- ${RM_CMD} -f ${tmpdir}/eth${eth_seq}.locked
882
- break
931
+ _iface_rename=0
932
+
933
+ if [ ${_iface_rename} -eq 1 ]; then
934
+ while [ -r ${tmpdir}/eth${eth_seq}.locked ]; do
935
+ _cur_time=$( ${DATE_CMD} +%s )
936
+ eval $( ${STAT_CMD} -s ${tmpdir}/eth${eth_seq}.locked )
937
+ _diff_time=$(( _cur_time - st_mtime ))
938
+
939
+ if [ ${_diff_time} -gt 8 ]; then
940
+ ${IFCONFIG_CMD} eth${eth_seq} > /dev/null 2>&1
941
+ _ret=$?
942
+ if [ ${_ret} -ne 0 ]; then
943
+ # remove orphaned lock
944
+ ${RM_CMD} -f ${tmpdir}/eth${eth_seq}.locked
945
+ break
946
+ fi
883
947
fi
884
- fi
885
948
886
- [ ${quiet} -ne 1 ] && ${ECHO} "${N1_COLOR}jstart: eth${eth_seq} locked (${_diff_time}), waiting (${_wait_count}/12)..${N0_COLOR}"
949
+ [ ${quiet} -ne 1 ] && ${ECHO} "${N1_COLOR}jstart: eth${eth_seq} locked (${_diff_time}), waiting (${_wait_count}/12)..${N0_COLOR}"
887
950
888
- _wait_count=$(( _wait_count + 1 ))
951
+ _wait_count=$(( _wait_count + 1 ))
889
952
890
- if [ ${_wait_count} -gt 12 ]; then
891
- _res=$( ${CAT_CMD} ${tmpdir}/eth${eth_seq}.locked )
892
- jstop jname=${jname} fast=1
893
- ${IFCONFIG_CMD} ${i} destroy
894
- log_err 1 "${N1_COLOR}${CBSD_APP}: waiting for unlock: still locked by [${_res}]: ${N2_COLOR}${tmpdir}/eth${eth_seq}.locked${N0_COLOR}"
895
- fi
953
+ if [ ${_wait_count} -gt 12 ]; then
954
+ _res=$( ${CAT_CMD} ${tmpdir}/eth${eth_seq}.locked )
955
+ jstop jname=${jname} fast=1
956
+ ${IFCONFIG_CMD} ${i} destroy
957
+ log_err 1 "${N1_COLOR}${CBSD_APP}: waiting for unlock: still locked by [${_res}]: ${N2_COLOR}${tmpdir}/eth${eth_seq}.locked${N0_COLOR}"
958
+ fi
896
959
897
- sleep 1
898
- done
960
+ sleep 1
961
+ done
899
962
900
- # make lock
901
- echo "${jname}" > ${tmpdir}/eth${eth_seq}.locked
902
- ${IFCONFIG_CMD} ${i} name eth${eth_seq} && ${IFCONFIG_CMD} eth${eth_seq} vnet ${jname}
963
+ # make lock
964
+ echo "${jname}" > ${tmpdir}/eth${eth_seq}.locked
965
+ ${IFCONFIG_CMD} ${i} name eth${eth_seq} && ${IFCONFIG_CMD} eth${eth_seq} vnet ${jname}
966
+ int_iface="eth${eth_seq}"
967
+ else
968
+ ${IFCONFIG_CMD} ${i} vnet ${jname}
969
+ int_iface="${i}"
970
+ fi
903
971
904
972
# more than one IPs in ip4_addr?
905
973
multi_ip=0
@@ -926,14 +994,14 @@ if [ ${vnet} -eq 1 ]; then
926
994
DHCLIENT_PROGRAM=${dhclient_program}
927
995
fi
928
996
# todo: FIB? NICE?
929
- ${CPUSET} ${JEXEC_CMD} ${jname} ${DHCLIENT_PROGRAM} eth${eth_seq }
997
+ ${CPUSET} ${JEXEC_CMD} ${jname} ${DHCLIENT_PROGRAM} ${int_iface }
930
998
;;
931
999
0|[Dd][Hh][Cc][Pp])
932
1000
# just skip
933
1001
;;
934
1002
*)
935
1003
# alias ? mtu ?
936
- # we need to re-build ifconfig_eth0 vars if values already exist to merge new IP address and
1004
+ # we need to re-build ifconfig_${int_iface} vars if values already exist to merge new IP address and
937
1005
# and do not spoil the remaining data
938
1006
939
1007
# Whats about Linux jail?
@@ -942,32 +1010,32 @@ if [ ${vnet} -eq 1 ]; then
942
1010
_osname=$( ${miscdir}/elf_tables --osname /bin/sh )
943
1011
# warning relevant for FreeBSD-based env
944
1012
if [ "${osname}" = "freebsd" ]; then
945
- ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}no such /etc/rc.conf: ${N2_COLOR}${name}${N1_COLOR}, skip for config ifconfig_eth0 ${N0_COLOR}" 1>&2
1013
+ ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}no such /etc/rc.conf: ${N2_COLOR}${name}${N1_COLOR}, skip for config ifconfig_${int_iface} ${N0_COLOR}" 1>&2
946
1014
else
947
1015
# Linux env?
948
1016
if [ ! -r "${path}/etc/os-release" ]; then
949
- ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}no such /etc/os-release: ${N2_COLOR}${name}${N1_COLOR}, skip for config ifconfig_eth0 ${N0_COLOR}" 1>&2
1017
+ ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}no such /etc/os-release: ${N2_COLOR}${name}${N1_COLOR}, skip for config ifconfig_${int_iface} ${N0_COLOR}" 1>&2
950
1018
else
951
1019
. ${path}/etc/os-release
952
1020
case "${ID}" in
953
1021
debian)
954
- ${ECHO} "${N1_COLOR}${CBSD_APP} use debian helper for config_eth0 ${N1_COLOR}"
1022
+ ${ECHO} "${N1_COLOR}${CBSD_APP} use debian helper for config_${int_iface} ${N1_COLOR}"
955
1023
# just test, netlink/BSD wIP
956
1024
# mgmt for first boot only? ! -r ${data}/etc/network/interfaces.d/* ?
957
1025
# ${CAT_CMD} > ${data}/etc/network/interfaces.d/lo <<EOF
958
1026
#auto lo
959
1027
#iface lo inet loopback
960
1028
#EOF
961
- # ${CAT_CMD} > ${data}/etc/network/interfaces.d/eth0 <<EOF
962
- #auto eth0
963
- #iface eth0 inet static
1029
+ # ${CAT_CMD} > ${data}/etc/network/interfaces.d/${int_iface} <<EOF
1030
+ #auto ${int_iface}
1031
+ #iface ${int_iface} inet static
964
1032
# address ${ip4_addr}/24
965
1033
# gateway 192.168.0.1
966
1034
#
967
1035
#EOF
968
1036
;;
969
1037
*)
970
- ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}skip config for ifconfig_eth0 : distri not supported yet: ${N2_COLOR}${ID}${N0_COLOR}" 1>&2
1038
+ ${ECHO} "${W1_COLOR}warning: ${N1_COLOR}skip config for ifconfig_${int_iface} : distri not supported yet: ${N2_COLOR}${ID}${N0_COLOR}" 1>&2
971
1039
;;
972
1040
esac
973
1041
fi
@@ -1016,25 +1084,25 @@ if [ ${vnet} -eq 1 ]; then
1016
1084
case "${myip_type}" in
1017
1085
1)
1018
1086
if [ ${multi_ip4} -lt 2 ]; then
1019
- find_ifconfig="ifconfig_eth0 "
1087
+ find_ifconfig="ifconfig_${int_iface} "
1020
1088
else
1021
1089
alias_num=$(( multi_ip4 - 2 ))
1022
- find_ifconfig="ifconfig_eth0_alias ${alias_num}"
1090
+ find_ifconfig="ifconfig_${int_iface}_alias ${alias_num}"
1023
1091
fi
1024
1092
;;
1025
1093
2)
1026
1094
if [ ${multi_ip6} -lt 2 ]; then
1027
- find_ifconfig="ifconfig_eth0_ipv6 "
1095
+ find_ifconfig="ifconfig_${int_iface}_ipv6 "
1028
1096
else
1029
1097
alias_num=$(( multi_ip6 - 2 ))
1030
- find_ifconfig="ifconfig_eth0_ipv6_alias ${alias_num}"
1098
+ find_ifconfig="ifconfig_${int_iface}_ipv6_alias ${alias_num}"
1031
1099
fi
1032
1100
;;
1033
1101
esac
1034
1102
1035
1103
eval $( ${GREP_CMD} ^${find_ifconfig}= ${data}/etc/rc.conf 2>/dev/null | ${HEAD_CMD} -n1 )
1036
1104
if [ -n "${ifconfig_eth0}" ]; then
1037
- ${ECHO} "${N1_COLOR}adjust IP address for eth0 : ${N2_COLOR}${ip4_addr}${N0_COLOR}" 1>&2
1105
+ ${ECHO} "${N1_COLOR}adjust IP address for ${int_iface} : ${N2_COLOR}${ip4_addr}${N0_COLOR}" 1>&2
1038
1106
for _part in ${ifconfig_eth0}; do
1039
1107
[ "${_part}" = "inet" ] && continue
1040
1108
[ "${_part}" = "inet6" ] && continue
@@ -1056,7 +1124,7 @@ if [ ${vnet} -eq 1 ]; then
1056
1124
done
1057
1125
1058
1126
# release lock
1059
- ${RM_CMD} -f ${tmpdir}/eth${eth_seq}.locked
1127
+ [ -r ${tmpdir}/eth${eth_seq}.locked ] && ${RM_CMD} -f ${tmpdir}/eth${eth_seq}.locked
1060
1128
eth_seq=$(( eth_seq + 1 ))
1061
1129
IFS=","
1062
1130
done
0 commit comments