m4_divert_push([PREPARE_TESTS]) [ # Creates a directory tree for use with "interface-reconfigure --root-dir". ifr_setup () { for script in \ interface-reconfigure \ InterfaceReconfigure.py \ InterfaceReconfigureBridge.py \ InterfaceReconfigureVswitch.py do cp $top_srcdir/xenserver/opt_xensource_libexec_$script $script done mkdir -p etc cat > etc/xensource-inventory < etc/xensource/network.conf for utility in \ sbin/ethtool \ sbin/ifconfig \ sbin/ifdown \ sbin/ifup \ sbin/ip \ sbin/update-issue \ sbin/vconfig \ usr/sbin/brctl \ usr/sbin/ovs-vlan-bug-workaround do mkdir -p `dirname $utility` cat > $utility <<'EOF' #! /bin/sh echo ${0} ${*} >&2 EOF chmod +x $utility done mkdir -p usr/bin cat > usr/bin/ovs-vsctl <<'EOF' #! /bin/sh echo ${0} ${*} >&2 while test ${#} -ge 4; do if test X"${1}" = Xget && \ test X"${2}" = Xinterface && \ test X"${4}" = Xofport; then if test X"${3}" = Xeth2; then echo 5 else echo -1 fi fi shift done EOF chmod +x usr/bin/ovs-vsctl cat > usr/bin/ovs-ofctl <<'EOF' #! /bin/sh echo ${0} ${*} >&2 # Check that the flow is properly formed. ovs-ofctl parse-flow "${3}" >/dev/null EOF chmod +x usr/bin/ovs-ofctl mkdir -p etc/sysconfig/network-scripts configure_netdev () { mkdir -p sys/class/net/${1} echo ${2} > sys/class/net/${1}/address echo ${3} > sys/class/net/${1}/tx_queue_len if test ${1} = eth1; then # No VLAN acceleration. echo 0x829 > sys/class/net/${1}/features else # Supports VLAN acceleration. echo 0x10b89 > sys/class/net/${1}/features fi mkdir sys/class/net/${1}/device ln -s ../../../bus/pci/drivers/e1000 sys/class/net/${1}/device/driver : >> etc/sysconfig/network-scripts/ifcfg-${1} } configure_netdev lo 00:00:00:00:00:00 0 configure_netdev eth0 00:22:19:22:4b:af 1000 configure_netdev eth1 00:22:19:22:4b:b1 1000 configure_netdev eth2 00:15:17:a0:29:80 1000 configure_netdev eth3 00:15:17:a0:29:81 1000 configure_netdev eth4 00:1b:21:29:ce:51 1000 mkdir -p var/xapi cat > var/xapi/network.dbcache <<'EOF' False OpaqueRef:86d81bcf-0d25-90b2-cb11-af2007bd586e bd62a141-091f-3909-e334-0334f67ff3be OpaqueRef:NULL -1 00:22:19:22:4b:af None eth0 False OpaqueRef:83e4a934-aeb5-e6f0-a743-d1c7ef7364c5 False OpaqueRef:NULL df8d35c2-cc3a-a623-7065-d987a29feb75 OpaqueRef:NULL -1 00:1b:21:29:ce:51 None eth4 False OpaqueRef:bf51b4d3-7bdc-ea55-ba21-539b150b0531 False OpaqueRef:86d81bcf-0d25-90b2-cb11-af2007bd586e 2f87fc95-5ab4-571a-2487-3f4ac1985663 OpaqueRef:NULL -1 00:22:19:22:4b:b1 None eth1 False OpaqueRef:92b41bf6-aa21-45d3-1c86-c87a5fa98f7d False OpaqueRef:NULL d2dfdab3-daf4-afea-f055-a25a0d24d714 OpaqueRef:4c0eb823-4d96-da1d-e75f-411b85badb0c 4 fe:ff:ff:ff:ff:ff None bond0 True OpaqueRef:a63afad0-fb4c-b4a4-3696-cbb3d88afc47 OpaqueRef:e623e1d6-cd02-be8d-820d-49d65c710297 False OpaqueRef:NULL f4ba396e-a993-a592-5fbc-a1d566afb59e 10.0.0.188 OpaqueRef:NULL -1 255.0.0.0 00:15:17:a0:29:81 Static eth3 True OpaqueRef:d9189da2-d00b-61ba-8a6d-ac42cc868e32 True OpaqueRef:NULL 646ca9a1-36ad-e2f9-3ecc-1e5622c201c2 172.18.3.188 OpaqueRef:NULL -1 255.255.0.0 00:15:17:a0:29:80 DHCP eth2 True OpaqueRef:6e7c6e81-6b5e-b91f-e1f9-9e028567bdfe False OpaqueRef:NULL 3941edd2-865b-8dd8-61f0-199f5e1fa652 OpaqueRef:e623e1d6-cd02-be8d-820d-49d65c710297 123 fe:ff:ff:ff:ff:ff None eth3 True OpaqueRef:240fb5f8-addc-6ea3-f921-2a42b42acd17 OpaqueRef:4c0eb823-4d96-da1d-e75f-411b85badb0c False OpaqueRef:NULL 6c0327a9-afa3-fc19-6798-a1bfe20095ed OpaqueRef:NULL -1 00:22:19:22:4b:af None bond0 OpaqueRef:86d81bcf-0d25-90b2-cb11-af2007bd586e True OpaqueRef:ec1e5037-60ea-97e5-54b8-39bdb43c071a OpaqueRef:69c904bb-8da9-3424-485b-8b47c2d3ef11 dad825f1-6d81-386e-849c-5589281e53e1 OpaqueRef:e0955887-571f-17fc-a971-61c1ec7d81b6 OpaqueRef:2956e6c8-487e-981c-85ff-c84796418768 OpaqueRef:69c904bb-8da9-3424-485b-8b47c2d3ef11 841814da-d0d2-9da4-0b2e-b6143480bbfb OpaqueRef:d2d1e51e-4da9-3163-8f57-bb683429335e OpaqueRef:2bc0fab5-523a-4125-609d-212391f5f6fc 399279a2-5ccd-5368-9af3-8622a1f1ac82 OpaqueRef:8e3e37e6-ebb9-087e-0201-f6a56bf554c3 OpaqueRef:d2d1e51e-4da9-3163-8f57-bb683429335e xapi2 99be2da4-6c33-6f8e-49ea-3bc592fe3c85 OpaqueRef:2bc0fab5-523a-4125-609d-212391f5f6fc xenbr3 2902ae1b-8013-897a-b697-0b200ea3aaa5 OpaqueRef:69c904bb-8da9-3424-485b-8b47c2d3ef11 xapi1 45cbbb43-113d-a712-3231-c6463f253cef OpaqueRef:2956e6c8-487e-981c-85ff-c84796418768 xenbr1 99f8771a-645a-26a3-e06c-30a401f1d009 OpaqueRef:205d1186-2cd1-d5e6-45e4-ea1698ea6e15 xenbr2 d08c8749-0c8f-9e8d-ce25-fd364661ee99 OpaqueRef:e0955887-571f-17fc-a971-61c1ec7d81b6 xenbr0 true c9eecb03-560d-61de-b6a8-56dfc766f67e OpaqueRef:eea8da94-a5e6-18fc-34a7-5e9b5a235806 xenbr4 d2c14c89-29cc-51d4-7664-633eff02b2ad xapi0 dc0f0632-c2aa-1b78-2fea-0d3a23c51740 OpaqueRef:8e3e37e6-ebb9-087e-0201-f6a56bf554c3 xapi3 db7bdc03-074d-42ae-fc73-9b06de1d57f6 secure EOF } ifr_run () { ./interface-reconfigure --root-prefix="`pwd`" --no-syslog "$@" } ifr_filter () { sed -n -e "s,`pwd`,,g" -e 's/ -- /\ /g' -e '/^Running command:/!p' stderr }] m4_divert_pop([PREPARE_TESTS]) AT_BANNER([interface-reconfigure]) AT_SETUP([non-VLAN, non-bond]) AT_KEYWORDS([interface-reconfigure]) AT_SKIP_IF([$non_ascii_cwd]) AT_SKIP_IF([test "$IS_WIN32" = "yes"]) ifr_setup AT_CHECK([ifr_run --force xenbr2 up], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xenbr2 up Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_up: xenbr2 Writing network configuration for xenbr2 Configuring xenbr2 using DHCP configuration configure_datapath: bridge - xenbr2 configure_datapath: physical - [u'eth2'] configure_datapath: extra ports - [] configure_datapath: extra bonds - [] /usr/bin/ovs-vsctl -vconsole:off get-fail-mode xenbr2 Applying changes to /etc/sysconfig/network-scripts/route-xenbr2 configuration Applying changes to /etc/sysconfig/network configuration Applying changes to /etc/sysconfig/network-scripts/ifcfg-xenbr2 configuration /sbin/ifconfig eth2 up mtu 1500 /sbin/ethtool -K eth2 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth2 on /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port eth2 --may-exist add-br xenbr2 --may-exist add-port xenbr2 eth2 set Bridge xenbr2 other-config:hwaddr="00:15:17:a0:29:80" set Bridge xenbr2 fail_mode=secure remove Bridge xenbr2 other_config disable-in-band br-set-external-id xenbr2 xs-network-uuids d08c8749-0c8f-9e8d-ce25-fd364661ee99 /usr/bin/ovs-vsctl -vconsole:off get interface eth2 ofport /usr/bin/ovs-ofctl add-flow xenbr2 idle_timeout=0,priority=0,in_port=5,arp,nw_proto=1,actions=local /usr/bin/ovs-ofctl add-flow xenbr2 idle_timeout=0,priority=0,in_port=local,arp,dl_src=00:15:17:a0:29:80,actions=5 /usr/bin/ovs-ofctl add-flow xenbr2 idle_timeout=0,priority=0,in_port=5,dl_dst=00:15:17:a0:29:80,actions=local /usr/bin/ovs-ofctl add-flow xenbr2 idle_timeout=0,priority=0,in_port=local,dl_src=00:15:17:a0:29:80,actions=5 /sbin/ifup xenbr2 /sbin/update-issue Committing changes to /etc/sysconfig/network-scripts/route-xenbr2 configuration Committing changes to /etc/sysconfig/network configuration Committing changes to /etc/sysconfig/network-scripts/ifcfg-xenbr2 configuration ]]) AT_CHECK([cat etc/sysconfig/network-scripts/ifcfg-xenbr2], [0], [# DO NOT EDIT: This file (ifcfg-xenbr2) was autogenerated by interface-reconfigure XEMANAGED=yes DEVICE=xenbr2 ONBOOT=no NOZEROCONF=yes TYPE=Ethernet BOOTPROTO=dhcp PERSISTENT_DHCLIENT=yes MTU=1500 ]) # Simulate interface-reconfigure creating xenbr2, so that we can tell # interface-reconfigure to take it back down. AT_CHECK([configure_netdev xenbr2 00:15:17:a0:29:80 0]) AT_CHECK([ifr_run --force xenbr2 down], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xenbr2 down Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_down: xenbr2 /sbin/ifdown xenbr2 deconfigure ipdev xenbr2 on xenbr2 deconfigure_bridge: bridge - xenbr2 action_down: bring down physical devices - [u'eth2'] /sbin/ifconfig eth2 down /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port xenbr2 --if-exists del-br xenbr2 ]]) AT_CLEANUP AT_SETUP([VLAN, non-bond]) AT_KEYWORDS([interface-reconfigure]) AT_SKIP_IF([$non_ascii_cwd]) AT_SKIP_IF([test "$IS_WIN32" = "yes"]) ifr_setup AT_CHECK([ifr_run --force xapi3 up], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi3 up Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_up: xapi3 Writing network configuration for xapi3 Configuring xapi3 using None configuration configure_datapath: bridge - xenbr3 configure_datapath: physical - [u'eth3'] configure_datapath: extra ports - [] configure_datapath: extra bonds - [] Applying changes to /etc/sysconfig/network-scripts/route-xapi3 configuration Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi3 configuration /sbin/ifconfig eth3 up mtu 1500 /sbin/ethtool -K eth3 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth3 on /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port eth3 --may-exist add-br xenbr3 --may-exist add-port xenbr3 eth3 set Bridge xenbr3 other-config:hwaddr="00:15:17:a0:29:81" set Bridge xenbr3 fail_mode=secure remove Bridge xenbr3 other_config disable-in-band br-set-external-id xenbr3 xs-network-uuids 2902ae1b-8013-897a-b697-0b200ea3aaa5;db7bdc03-074d-42ae-fc73-9b06de1d57f6 --if-exists del-br xapi3 --may-exist add-br xapi3 xenbr3 123 br-set-external-id xapi3 xs-network-uuids 2902ae1b-8013-897a-b697-0b200ea3aaa5;db7bdc03-074d-42ae-fc73-9b06de1d57f6 set Interface xapi3 MAC="00:15:17:a0:29:81" /sbin/ifup xapi3 /sbin/update-issue Committing changes to /etc/sysconfig/network-scripts/route-xapi3 configuration Committing changes to /etc/sysconfig/network-scripts/ifcfg-xapi3 configuration ]]) AT_CHECK([cat etc/sysconfig/network-scripts/ifcfg-xapi3], [0], [# DO NOT EDIT: This file (ifcfg-xapi3) was autogenerated by interface-reconfigure XEMANAGED=yes DEVICE=xapi3 ONBOOT=no NOZEROCONF=yes TYPE=Ethernet BOOTPROTO=none MTU=1500 ]) # Simulate interface-reconfigure creating xapi3, so that we can tell # interface-reconfigure to take it back down. AT_CHECK([configure_netdev xapi3 00:23:20:AC:AF:02 0]) AT_CHECK([ifr_run --force xapi3 down], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi3 down Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_down: xapi3 /sbin/ifdown xapi3 deconfigure ipdev xapi3 on xenbr3 deconfigure_bridge: bridge - xapi3 action_down: no more masters, bring down slave xenbr3 deconfigure_bridge: bridge - xenbr3 action_down: bring down physical devices - [u'eth3'] /sbin/ifconfig eth3 down /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port xapi3 --if-exists del-br xapi3 --if-exists del-br xenbr3 ]]) AT_CLEANUP AT_SETUP([Bond, non-VLAN]) AT_KEYWORDS([interface-reconfigure]) AT_SKIP_IF([$non_ascii_cwd]) AT_SKIP_IF([test "$IS_WIN32" = "yes"]) ifr_setup # Pretend that bond0 exists, even though it would really be created by # a "create-bond" call in an ovs-vsctl invocation within # interface-reconfigure, because otherwise interface-reconfigure will # die with "failed to apply changes: netdev: up: device bond0 does not # exist" after it thinks it created bond0. AT_CHECK([configure_netdev bond0 00:23:20:e6:39:75 0]) AT_CHECK([ifr_run --force xapi1 up], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi1 up Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_up: xapi1 Writing network configuration for xapi1 Configuring xapi1 using None configuration configure_datapath: leaving bond bond0 up configure_datapath: leaving bond bond0 up configure_datapath: bridge - xapi1 configure_datapath: physical - [u'eth0', u'eth1'] configure_datapath: extra ports - [] configure_datapath: extra bonds - [] netdev: down: device xenbr0 does not exist, ignoring netdev: down: device xenbr1 does not exist, ignoring Applying changes to /etc/sysconfig/network-scripts/route-xapi1 configuration Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi1 configuration /sbin/ifconfig eth0 up mtu 1500 /sbin/ethtool -K eth0 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth0 on /sbin/ifconfig eth1 up mtu 1500 /sbin/ethtool -K eth1 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth1 off /usr/bin/ovs-vsctl --timeout=20 --if-exists del-br xenbr0 --if-exists del-br xenbr1 --with-iface --if-exists del-port eth0 --with-iface --if-exists del-port eth1 --may-exist add-br xapi1 --with-iface --if-exists del-port bond0 --fake-iface add-bond xapi1 bond0 eth0 eth1 set Port bond0 MAC="00:22:19:22:4b:af" other-config:bond-miimon-interval=100 bond_downdelay=200 bond_updelay=31000 other-config:bond-detect-mode=carrier lacp=off bond_mode=balance-slb set Bridge xapi1 other-config:hwaddr="00:22:19:22:4b:af" set Bridge xapi1 fail_mode=secure remove Bridge xapi1 other_config disable-in-band br-set-external-id xapi1 xs-network-uuids 45cbbb43-113d-a712-3231-c6463f253cef;99be2da4-6c33-6f8e-49ea-3bc592fe3c85 /sbin/ifup xapi1 action_up: bring up bond0 /sbin/ifconfig bond0 up /sbin/update-issue Committing changes to /etc/sysconfig/network-scripts/route-xapi1 configuration Committing changes to /etc/sysconfig/network-scripts/ifcfg-xapi1 configuration ]]) AT_CHECK([cat etc/sysconfig/network-scripts/ifcfg-xapi1], [0], [# DO NOT EDIT: This file (ifcfg-xapi1) was autogenerated by interface-reconfigure XEMANAGED=yes DEVICE=xapi1 ONBOOT=no NOZEROCONF=yes TYPE=Ethernet BOOTPROTO=none MTU=1500 ]) # Simulate interface-reconfigure creating xapi1, so that we can tell # interface-reconfigure to take it back down. AT_CHECK([configure_netdev xapi1 00:22:19:22:4B:AF 0]) AT_CHECK([ifr_run --force xapi1 down], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi1 down Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_down: xapi1 /sbin/ifdown xapi1 deconfigure ipdev xapi1 on xapi1 deconfigure_bridge: bridge - xapi1 action_down: bring down physical devices - [u'eth0', u'eth1'] /sbin/ifconfig eth0 down /sbin/ifconfig eth1 down /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port xapi1 --if-exists del-br xapi1 ]]) AT_CLEANUP AT_SETUP([VLAN on bond]) AT_KEYWORDS([interface-reconfigure]) AT_SKIP_IF([$non_ascii_cwd]) AT_SKIP_IF([test "$IS_WIN32" = "yes"]) ifr_setup # Pretend that bond0 exists, even though it would really be created by # a "create-bond" call in an ovs-vsctl invocation within # interface-reconfigure, because otherwise interface-reconfigure will # die with "failed to apply changes: netdev: up: device bond0 does not # exist" after it thinks it created bond0. AT_CHECK([configure_netdev bond0 00:23:20:e6:39:75 0]) AT_CHECK([ifr_run --force xapi2 up], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi2 up Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_up: xapi2 Writing network configuration for xapi2 Configuring xapi2 using None configuration configure_datapath: leaving bond bond0 up configure_datapath: leaving bond bond0 up configure_datapath: bridge - xapi1 configure_datapath: physical - [u'eth0', u'eth1'] configure_datapath: extra ports - [] configure_datapath: extra bonds - [] netdev: down: device xenbr0 does not exist, ignoring netdev: down: device xenbr1 does not exist, ignoring Applying changes to /etc/sysconfig/network-scripts/route-xapi2 configuration Applying changes to /etc/sysconfig/network-scripts/ifcfg-xapi2 configuration /sbin/ifconfig eth0 up mtu 1500 /sbin/ethtool -K eth0 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth0 on /sbin/ifconfig eth1 up mtu 1500 /sbin/ethtool -K eth1 gro off lro off /usr/sbin/ovs-vlan-bug-workaround eth1 off /usr/bin/ovs-vsctl --timeout=20 --if-exists del-br xenbr0 --if-exists del-br xenbr1 --with-iface --if-exists del-port eth0 --with-iface --if-exists del-port eth1 --may-exist add-br xapi1 --with-iface --if-exists del-port bond0 --fake-iface add-bond xapi1 bond0 eth0 eth1 set Port bond0 MAC="00:22:19:22:4b:af" other-config:bond-miimon-interval=100 bond_downdelay=200 bond_updelay=31000 other-config:bond-detect-mode=carrier lacp=off bond_mode=balance-slb set Bridge xapi1 other-config:hwaddr="00:22:19:22:4b:af" set Bridge xapi1 fail_mode=secure remove Bridge xapi1 other_config disable-in-band br-set-external-id xapi1 xs-network-uuids 45cbbb43-113d-a712-3231-c6463f253cef;99be2da4-6c33-6f8e-49ea-3bc592fe3c85 --if-exists del-br xapi2 --may-exist add-br xapi2 xapi1 4 br-set-external-id xapi2 xs-network-uuids 45cbbb43-113d-a712-3231-c6463f253cef;99be2da4-6c33-6f8e-49ea-3bc592fe3c85 set Interface xapi2 MAC="00:22:19:22:4b:af" /sbin/ifup xapi2 action_up: bring up bond0 /sbin/ifconfig bond0 up /sbin/update-issue Committing changes to /etc/sysconfig/network-scripts/route-xapi2 configuration Committing changes to /etc/sysconfig/network-scripts/ifcfg-xapi2 configuration ]]) AT_CHECK([cat etc/sysconfig/network-scripts/ifcfg-xapi2], [0], [# DO NOT EDIT: This file (ifcfg-xapi2) was autogenerated by interface-reconfigure XEMANAGED=yes DEVICE=xapi2 ONBOOT=no NOZEROCONF=yes TYPE=Ethernet BOOTPROTO=none MTU=1500 ]) # Simulate interface-reconfigure creating xapi2, so that we can tell # interface-reconfigure to take it back down. AT_CHECK([configure_netdev xapi2 00:23:20:A4:71:C2 0]) AT_CHECK([ifr_run --force xapi2 down], [0], [], [stderr]) AT_CHECK([ifr_filter], [0], [[Force interface xapi2 down Loading xapi database cache from /var/xapi/network.dbcache Configured for Vswitch datapath action_down: xapi2 /sbin/ifdown xapi2 deconfigure ipdev xapi2 on xapi1 deconfigure_bridge: bridge - xapi2 action_down: no more masters, bring down slave xapi1 deconfigure_bridge: bridge - xapi1 action_down: bring down physical devices - [u'eth0', u'eth1'] /sbin/ifconfig eth0 down /sbin/ifconfig eth1 down /usr/bin/ovs-vsctl --timeout=20 --with-iface --if-exists del-port xapi2 --if-exists del-br xapi2 --if-exists del-br xapi1 ]]) AT_CLEANUP dnl This test configures two tunnels, then deletes the second and re-uses its dnl name for different types of ports. This was introduced to detect errors dnl where port configuration persists even when the port is deleted and dnl readded. AT_SETUP([Re-create port with different types]) AT_KEYWORDS([interface-reconfigure]) OVS_VSWITCHD_START( [add-port br0 p0 -- set int p0 type=gre options:remote_ip=127.0.0.1 -- \ add-port br0 p1 -- set int p1 type=dummy -- \ add-port br0 p2 -- set int p2 type=dummy]) AT_CHECK([ovs-vsctl set int p1 type=gre options:remote_ip=127.0.0.1]) AT_CHECK([ovs-vsctl del-port p1]) AT_CHECK([ovs-vsctl add-port br0 p1 -- set int p1 type=dummy]) AT_CLEANUP