Dmitry V. Levin wrote: > On Thu, Sep 21, 2006 at 02:33:34PM +0400, Dmitry V. Levin wrote: >> On Thu, Sep 21, 2006 at 10:07:37AM +0400, Alexey I. Froloff wrote: >>> * Dmitry V. Levin [060920 20:37]: >>>> Можно, конечно, но на месте upstream'а я бы завёл список ip-адресов, >>>> которые не нужно проверять vzarpipdetect'ом, и список ip-адресов, которые >>>> не нужно анонсировать vzarpipset'ом и vzarp'ом. >>> А где держать этот список и в каком виде? Что-то типа >>> ARP_SKIP_DETECT/ARP_SKIP_ANNOUNCE со списком подсетей в >>> /etc/sysconfig/vz ? >> Да, я думаю предложить им такое. > > Я передумал и теперь предполагаю сделать так: > > vzarp: When adding ip, do not announce it on those ifaces where it is not local. > vzarpipdetect: Do not request arp on those ifaces where given ip is not local. > vzarpipset: Do not send arp on those ifaces where given ip is not local. > --- a/etc/vps-functions > +++ b/etc/vps-functions > @@ -119,6 +119,9 @@ vzarp() > > [ -n "${NETDEVICES}" ] || vzwarning "Device list is empty" > for DEV in ${NETDEVICES}; do > + [ "$1" = del ] || > + ! ${IP_CMD} route get ${2} oif ${DEV} |grep -qs ' via .* src ' || > + continue > ${IP_CMD} neigh ${1} proxy ${2} dev ${DEV} > /dev/null 2>&1 > done > } > @@ -130,14 +133,16 @@ vzarpipdetect() > local ip > local cmd > > - [ -z "${1}" ] && return > + [ -n "$1" ] || return > [ "${SKIP_ARPDETECT}" = "yes" ] && return > > - for ip in ${1}; do > - cmd="$cmd -e $ip" > - done > - > for DEV in ${NETDEVICES}; do > + for ip in ${1}; do > + ! ${IP_CMD} route get ${ip} oif ${DEV} |grep -qs ' via .* src ' || > + continue > + cmd="$cmd -e $ip" > + done > + [ -n "$cmd" ] || continue > ${ARPSEND_CMD} -D ${cmd} ${DEV} || > vzwarning "${ARPSEND_CMD} -D ${cmd} ${DEV} FAILED" > done > @@ -148,15 +153,17 @@ vzarpipset() > { > local DEV > local ip > - local dev > + local cmd > > - [ -z "$1" ] && return > + [ -n "$1" ] || return > > - for dev in ${NETDEVICES}; do > + for DEV in ${NETDEVICES}; do > for ip in ${1}; do > - opt="-i ${ip} -e ${ip}" > - ${ARPSEND_CMD} -U ${opt} ${dev} || > - vzwarning "${ARPSEND_CMD} -U ${opt} ${dev} FAILED" > + ! ${IP_CMD} route get ${ip} oif ${DEV} |grep -qs ' via .* src ' || > + continue > + cmd="-i ${ip} -e ${ip}" > + ${ARPSEND_CMD} -U ${cmd} ${DEV} || > + vzwarning "${ARPSEND_CMD} -U ${cmd} ${DEV} FAILED" > done > done > } > > Идея возникла в результате прочтения > https://bugzilla.altlinux.org/show_bug.cgi?id=10324 В аттаче - работающий вариант вышеописанной идеи (если я ее правильно понял). ;) -- WBR, Dmitry Lebkov