openstack neutron reverse engineered

40
Openstack Neutron Reverse Engineered Sridhar K. N. Rao to Shreyansh Jain, Manpreet Singh and Nupur

Upload: openstackindia

Post on 15-Apr-2017

604 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: OpenStack Neutron Reverse Engineered

Openstack Neutron Reverse Engineered

Sridhar K. N. Rao

Thanks to Shreyansh Jain, Manpreet Singh and Nupur Sharma

Page 2: OpenStack Neutron Reverse Engineered

The Flow

• Overall Architecture.• Description of Components– Internal Flows.

• System-wide Control and Data Flows– Communication between the components

• Tips for extensions.• Documentation structure.

Page 3: OpenStack Neutron Reverse Engineered

Neutron AgentsCompute Node Agent(s)

RPC Mechanism

REST APIs Management

Plugin Neutron DBService Plugins

Mechanism Driver

Page 4: OpenStack Neutron Reverse Engineered

WSGI

Page 5: OpenStack Neutron Reverse Engineered
Page 6: OpenStack Neutron Reverse Engineered

WSGI-Server

Requests

Page 7: OpenStack Neutron Reverse Engineered

Collection,Resources,{collection_actions, Member_actions,Path_prefixRequirementsController}

Page 8: OpenStack Neutron Reverse Engineered

RPC

Page 9: OpenStack Neutron Reverse Engineered
Page 10: OpenStack Neutron Reverse Engineered

L3

Page 11: OpenStack Neutron Reverse Engineered
Page 12: OpenStack Neutron Reverse Engineered

ML2

Page 13: OpenStack Neutron Reverse Engineered

ML2 Plugin

Type Manager

Mechanism manager

Agents

Extension Manager

DB

Neutron Server (WSGI-Apps)

Page 14: OpenStack Neutron Reverse Engineered

Initialization

__init__

_register_mechanisms()This method should only be called onceRegister all mechanism drivers via NamedExtensionManager!!!

initialize

_sync_vlan_allocations()

Initializeex: VLAN

__init__

initialize()for driver in self.ordered_ext_drivers:driver.obj.initialize() initialize each driver

__init__(self):

_register_drivers()Register all extension drivers

initialize(self):driver.obj.initialize()

__init__

_register_types()_check_tenant_network_types()

Page 15: OpenStack Neutron Reverse Engineered

Handling of REST calls

Ordered List of Mechanism Drivers

ML2-Plugin[Create/Update/Delete_Network/Subnet/Port_Pre/PostCommit]

Mechanism-Manager[Create/Update/Delete_Network/Subnet/Port_Pre/PostCommit]

Mechanism-Driver-1

Mechanism-Driver-2

Mechanism-Driver-N

For each driver in the ordered_list_of_mechanism_Drivers:Call appropriate function in each driver.

Page 16: OpenStack Neutron Reverse Engineered

Handling of REST calls

ML2-PluginDB

Extension Manager Mechanism Manager

Page 17: OpenStack Neutron Reverse Engineered

Handling Rest Calls – Create Port_notify_l3_agent_new_port

notify_security_groups_member_updated

_bind_port_if_needed***

binding.vif_type != VIF_TYPE_UNBOUND or ! binding.host

_notify_port_updated()if allow_notify and need_notify:

return context

_bind_port(context)

count > MAX_BIND_TRIES

_commit_port_binding()

_update_port_dict_bindingConstruct a new PortContextmechanism_manager.bind_port()

Binding:

segmentvif_typevif_detailsvnic_typehostdriverprofile

Page 18: OpenStack Neutron Reverse Engineered

Context!

Page 19: OpenStack Neutron Reverse Engineered

RPC Handling

Page 20: OpenStack Neutron Reverse Engineered

Notifications

Page 21: OpenStack Neutron Reverse Engineered

OVS Mechanism Driver

Page 22: OpenStack Neutron Reverse Engineered

NEUTRON AGENTS DHCP

Page 23: OpenStack Neutron Reverse Engineered

Initialization

Page 24: OpenStack Neutron Reverse Engineered

Calls from Plugin

Page 25: OpenStack Neutron Reverse Engineered

Enabling DHCP

Page 26: OpenStack Neutron Reverse Engineered

NEUTRON AGENTS L3

Page 27: OpenStack Neutron Reverse Engineered

Initialization

Page 28: OpenStack Neutron Reverse Engineered
Page 29: OpenStack Neutron Reverse Engineered
Page 30: OpenStack Neutron Reverse Engineered
Page 31: OpenStack Neutron Reverse Engineered

OVS-NEUTRON AGENT

Page 32: OpenStack Neutron Reverse Engineered
Page 33: OpenStack Neutron Reverse Engineered
Page 34: OpenStack Neutron Reverse Engineered
Page 35: OpenStack Neutron Reverse Engineered
Page 36: OpenStack Neutron Reverse Engineered
Page 37: OpenStack Neutron Reverse Engineered
Page 38: OpenStack Neutron Reverse Engineered

Nova-Neutron

Page 39: OpenStack Neutron Reverse Engineered
Page 40: OpenStack Neutron Reverse Engineered