+function ipv4_netmask2prefix() {
+ local netmask="${1}"
+ assert isset netmask
+
+ local mask=0
+
+ local field
+ for field in ${netmask//\./ }; do
+ mask=$(( $(( ${mask} << 8 )) | ${field} ))
+ done
+
+ local cidr=0
+ local x="$(( 128 << 24 ))" # 0x80000000
+
+ while [ $(( ${x} & ${mask} )) -ne 0 ]; do
+ [ ${mask} -eq ${x} ] && mask=0 || mask=$(( ${mask} << 1 ))
+ cidr=$(( ${cidr} + 1 ))
+ done
+
+ assert [ $(( ${mask} & 2147483647 )) -eq 0 ]
+
+ print "${cidr}"
+}
+