DF-3502 / enablers.sh
#!/bin/sh # Lab enabler patcher for DF-3502 verification (guest-side). # E1 (DF-3499 fix): guard bcopy(NULL,...,0) in ng_fec_get_unit # E2: rmnode skips ng_fec_stop (unbalanced ifnet_deserialize_all -> INVARIANTS panic) # E3: delport serializes member around if_ioctl (vtnet_serialize_assert panic) # E1/E2/E3 are *verification enablers only*; E2/E3 facets are filed as DF-3500. set -e cd /usr/src/sys/netgraph/fec if [ "$(grep -c 'if (ng_fec_units != NULL)' ng_fec.c)" = "1" ]; then patch -s < /tmp/fix_df3499.diff && echo E1_APPLIED else echo E1_present fi grep -q "LAB ENABLER" ng_fec.c || { sed -i "" "s|^\tng_fec_stop(&priv->arpcom.ac_if);|\t/* ng_fec_stop(\&priv->arpcom.ac_if); LAB ENABLER E2 */|" ng_fec.c echo E2_APPLIED } grep -q "LAB ENABLER E3" ng_fec.c || { sed -i "" "s|^\tbifp->if_flags \&= ~IFF_UP;$|\tbifp->if_flags \&= ~IFF_UP; /* E3 */|" ng_fec.c sed -i "" "s|^\tbifp->if_ioctl(bifp, SIOCSIFFLAGS, NULL, NULL);$|\tifnet_serialize_all(bifp); bifp->if_ioctl(bifp, SIOCSIFFLAGS, NULL, NULL); ifnet_deserialize_all(bifp); /* LAB ENABLER E3 */|" ng_fec.c echo E3_APPLIED } echo guards: e1=$(grep -c "if (ng_fec_units != NULL)" ng_fec.c) e2=$(grep -c "LAB ENABLER E2" ng_fec.c) e3=$(grep -c "LAB ENABLER E3" ng_fec.c) make 2>&1 | tail -1 |