I have read neutron source code and have found the reason: When assigning a fip to a VM, a callback for fip update event is invoked[1]. Then a fip agent port for the host bound to the fixed port is created as follows: [1]->[2]->[3] [1]https://github.com/openstack/neutron/blob/master/neutron/db/l3_dvr_db.py#L321 [2]https://github.com/openstack/neutron/blob/master/neutron/db/l3_dvr_db.py#L840 [3]https://github.com/openstack/neutron/blob/master/neutron/db/l3_dvr_db.py#L865 The details of the fip agent port is as follows: +-----------------------+---------------------------------------------------------------------------------+ | Field | Value | +-----------------------+---------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | shz-server87 | | binding:profile | {} | | binding:vif_details | {} | | binding:vif_type | binding_failed | | binding:vnic_type | normal | | created_at | 2017-10-17T02:09:27Z | | description | | | device_id | f83bc76a-917d-457b-a472-c34610621454 | | device_owner | network:floatingip_agent_gateway | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "5ba473f5-44e2-411c-80e6-c13d15b6b1cc", "ip_address": "9.9.9.15"} | | id | 46a91872-d25b-4ccc-9d04-0b8c894ace67 | | mac_address | fa:16:3e:93:36:28 | | name | | | network_id | af256bab-acbc-419c-bdcf-3ba6708da4af | | port_security_enabled | False | | project_id | | | qos_policy_id | | | revision_number | 4 | | security_groups | | | status | DOWN | | tags | | | tenant_id | | | updated_at | 2017-10-17T02:09:28Z | +-----------------------+---------------------------------------------------------------------------------+