@@ -5,6 +5,32 @@ __net_cmdline_sh_functions=1
55
66. shell-error
77
8+ __valid_hex ()
9+ {
10+ while [ " $# " -gt 0 ]; do
11+ [ " ${# 1} " -eq 2 ] && [ -z " ${1# [0-9a-fA-F][0-9a-fA-F]} " ] ||
12+ return 1
13+ shift
14+ done
15+ }
16+
17+ __cmdline_parse_macaddr ()
18+ {
19+ case " $# " in
20+ 6|20)
21+ __valid_hex " $@ " ||
22+ fatal " syntax error: value does not look like a MAC address"
23+ ;;
24+ * )
25+ fatal " syntax error: MAC address must contain 6 or 20 components, but got $# "
26+ ;;
27+ esac
28+ case " $# " in
29+ 6) macaddr=" $1 :$2 :$3 :$4 :$5 :$6 " ;;
30+ 20) macaddr=" $1 :$2 :$3 :$4 :$5 :$6 :$7 :$8 :$9 :${10} :${11} :${12} :${13} :${14} :${15} :${16} :${17} :${18} :${19} :${20} " ;;
31+ esac
32+ }
33+
834ip_to_var ()
935{
1036 local i v=" $1 :"
@@ -47,10 +73,8 @@ ip_to_var()
4773 shift 2
4874 [ $# -eq 0 ] ||
4975 { mtu=" $1 " ; shift ; }
50- [ $# -ne 6 ] ||
51- { macaddr=" $1 :$2 :$3 :$4 :$5 :$6 " ; shift 6; }
5276 [ $# -eq 0 ] ||
53- fatal " syntax error: macaddr must contain 6 components "
77+ __cmdline_parse_macaddr " $@ "
5478 [ -n " $interface " ] ||
5579 fatal " interface name must be non-empty"
5680 return 0
@@ -70,10 +94,8 @@ ip_to_var()
7094
7195 if [ -z " $1 " ] || [ -n " ${1##* [!0-9]* } " ]; then
7296 mtu=" $1 " ; shift
73- [ $# -ne 6 ] ||
74- { macaddr=" $1 :$2 :$3 :$4 :$5 :$6 " ; shift 6; }
7597 [ $# -eq 0 ] ||
76- fatal " syntax error: macaddr must contain 6 components "
98+ __cmdline_parse_macaddr " $@ "
7799 return 0
78100 fi
79101
@@ -125,19 +147,11 @@ ifname_to_var()
125147
126148 interface=' ' macaddr=' '
127149
128- case " $# " in
129- 7)
130- interface=" ${1#: } "
131- macaddr=" $2 :$3 :$4 :$5 :$6 :$7 "
132- ;;
133- 21)
134- interface=" ${1#: } "
135- macaddr=" $2 :$3 :$4 :$5 :$6 :$7 :$8 :$9 :${10} :${11} :${12} :${13} :${14} :${15} :${16} :${17} :${18} :${19} :${20} :${21} "
136- ;;
137- * )
138- fatal " syntax error: ifname must contain 7 or 21 components"
139- ;;
140- esac
150+ [ " $# " -gt 1 ] ||
151+ fatal " syntax error: ifname must contain 7 or 21 components"
152+
153+ interface=" ${1#: } " ; shift
154+ __cmdline_parse_macaddr " $@ "
141155}
142156
143157fi # __net_cmdline_sh_functions
0 commit comments