| #!/bin/bash | 
 | # | 
 | # Neutron Linux Bridge L2 agent | 
 | # ----------------------------- | 
 |  | 
 | # Save trace setting | 
 | _XTRACE_NEUTRON_LB=$(set +o | grep xtrace) | 
 | set +o xtrace | 
 |  | 
 | function neutron_lb_cleanup { | 
 |     sudo ip link delete $PUBLIC_BRIDGE | 
 |  | 
 |     bridge_list=`ls /sys/class/net/*/bridge/bridge_id 2>/dev/null | cut -f5 -d/` | 
 |     if [[ -z "$bridge_list" ]]; then | 
 |         return | 
 |     fi | 
 |     if [[ "$Q_ML2_TENANT_NETWORK_TYPE" = "vxlan" ]]; then | 
 |         for port in $(echo $bridge_list | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e vxlan-[0-9a-f\-]*); do | 
 |             sudo ip link delete $port | 
 |         done | 
 |     elif [[ "$Q_ML2_TENANT_NETWORK_TYPE" = "vlan" ]]; then | 
 |         for port in $(echo $bridge_list | grep -o -e [a-zA-Z\-]*tap[0-9a-f\-]* -e ${LB_PHYSICAL_INTERFACE}\.[0-9a-f\-]*); do | 
 |             sudo ip link delete $port | 
 |         done | 
 |     fi | 
 |     for bridge in $(echo $bridge_list |grep -o -e brq[0-9a-f\-]*); do | 
 |         sudo ip link delete $bridge | 
 |     done | 
 | } | 
 |  | 
 | function is_neutron_ovs_base_plugin { | 
 |     # linuxbridge doesn't use OVS | 
 |     return 1 | 
 | } | 
 |  | 
 | function neutron_plugin_create_nova_conf { | 
 |     : | 
 | } | 
 |  | 
 | function neutron_plugin_install_agent_packages { | 
 |     : | 
 | } | 
 |  | 
 | function neutron_plugin_configure_dhcp_agent { | 
 |     local conf_file=$1 | 
 |     : | 
 | } | 
 |  | 
 | function neutron_plugin_configure_l3_agent { | 
 |     local conf_file=$1 | 
 |     sudo ip link add $PUBLIC_BRIDGE type bridge | 
 |     set_mtu $PUBLIC_BRIDGE $PUBLIC_BRIDGE_MTU | 
 | } | 
 |  | 
 | function neutron_plugin_configure_plugin_agent { | 
 |     # Setup physical network interface mappings.  Override | 
 |     # ``LB_VLAN_RANGES`` and ``LB_INTERFACE_MAPPINGS`` in ``localrc`` for more | 
 |     # complex physical network configurations. | 
 |     if [[ "$LB_INTERFACE_MAPPINGS" == "" ]] && [[ "$PHYSICAL_NETWORK" != "" ]] && [[ "$LB_PHYSICAL_INTERFACE" != "" ]]; then | 
 |         LB_INTERFACE_MAPPINGS=$PHYSICAL_NETWORK:$LB_PHYSICAL_INTERFACE | 
 |     fi | 
 |     if [[ "$PUBLIC_BRIDGE" != "" ]] && [[ "$PUBLIC_PHYSICAL_NETWORK" != "" ]]; then | 
 |         if is_service_enabled q-l3 || is_service_enabled neutron-l3; then | 
 |             iniset /$Q_PLUGIN_CONF_FILE linux_bridge bridge_mappings "$PUBLIC_PHYSICAL_NETWORK:$PUBLIC_BRIDGE" | 
 |         fi | 
 |     fi | 
 |     if [[ "$LB_INTERFACE_MAPPINGS" != "" ]]; then | 
 |         iniset /$Q_PLUGIN_CONF_FILE linux_bridge physical_interface_mappings $LB_INTERFACE_MAPPINGS | 
 |     fi | 
 |     if [[ "$Q_USE_SECGROUP" == "True" ]]; then | 
 |         iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver | 
 |         if ! running_in_container; then | 
 |             enable_kernel_bridge_firewall | 
 |         fi | 
 |     else | 
 |         iniset /$Q_PLUGIN_CONF_FILE securitygroup firewall_driver neutron.agent.firewall.NoopFirewallDriver | 
 |     fi | 
 |     AGENT_BINARY="$NEUTRON_BIN_DIR/neutron-linuxbridge-agent" | 
 |     iniset /$Q_PLUGIN_CONF_FILE agent tunnel_types $Q_TUNNEL_TYPES | 
 |  | 
 |     # Configure vxlan tunneling | 
 |     if [[ "$ENABLE_TENANT_TUNNELS" == "True" ]]; then | 
 |         if [[ "$Q_ML2_TENANT_NETWORK_TYPE" == "vxlan" ]]; then | 
 |             iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "True" | 
 |             iniset /$Q_PLUGIN_CONF_FILE vxlan local_ip $TUNNEL_ENDPOINT_IP | 
 |         else | 
 |             iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "False" | 
 |         fi | 
 |     else | 
 |         iniset /$Q_PLUGIN_CONF_FILE vxlan enable_vxlan "False" | 
 |     fi | 
 | } | 
 |  | 
 | function neutron_plugin_setup_interface_driver { | 
 |     local conf_file=$1 | 
 |     iniset $conf_file DEFAULT interface_driver linuxbridge | 
 | } | 
 |  | 
 | function neutron_plugin_check_adv_test_requirements { | 
 |     is_service_enabled q-agt neutron-agent && is_service_enabled q-dhcp neutron-dhcp && return 0 | 
 | } | 
 |  | 
 | # Restore xtrace | 
 | $_XTRACE_NEUTRON_LB |