[RFE] Create a modular L2 agent framework for linuxbridge, sriov and macvtap agents
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
neutron |
Fix Released
|
Wishlist
|
Andreas Scheuring |
Bug Description
Problem Statement
=================
Currently, the Open vSwitch, Linux Bridge, and sriov mechanism drivers for the ML2 plugin have their own agents. This means that when improvements are made to one agent implementation, they have to be ported over to the other agents to gain the improvement. This has already happened, with patches like [1]. Much of the agent functionality is common enough that much of the code could be shared.
Discussion on the mailing list [2]
Analysis of current agents
=======
Currently the following agents are in the neutron tree
- openvswitch [4]
- linuxbridge [3]
- sriov [5]
- mlnx agent [6]
For Mitaka the following agent is proposed
- Macvtap agent [7]
The following agent use a classical agent loop, monitoring or new devices to show up: linuxbridge, sriov, mlnx, macvtap
OVS uses ovsdb events (or similar things) to get notified about new events.
Proposal
========
High level architecture
-------
Today the linuxbridge agent exists of 4 classes
- NetworkSegment
- LinuxBridgeManager --> encpsulating most of the bridge specifics
- LinuxBridgeRpcC
- LinuxBridgeNeut
#1 Get a clear separation between agent loop and bridge impl specifics
Move all bridge specific code from LinuxBridgeNeut
#2 Modify the LinuxBridgeNeut
#3 Merge LinuxBridgeRpcC
#4 Establish a clear interface for a manager class and enforce this in the common agent. Other manager must satisfy this interface in order to work properly with the common agent
#5 Move common agent into a new location
Benefit
-------
Sharing agent code, getting improvements/fixes for all agents. No needs for porting anymore.
Scope
-----
The proposal will restructure the lb agent in such a way and establish the lb agent as a first user.
NOT part of this proposal is to move over the sriov agent. However the common agent is designed in a way to make that easily possible. I'm just saying this is a separate effort.
This proposal will have no impact on the OVS agent.
Possible follow-up stages
-------
- Implement macvtap agent as exploiter
- Move over sriov agent as exploiter
- Get shared code between the common agent and ovs agent?
- mlnx agent?
Sources
=======
[1] https:/
[2] http://
[3] https:/
[4] https:/
[5] https:/
[6] https:/
[7] https:/
summary: |
- Modular L2 Agent + Create a modular L2 agent framework for OVS and Linux Bridge agents to + inherit from |
summary: |
- Create a modular L2 agent framework for OVS and Linux Bridge agents to - inherit from + Create a modular L2 agent framework for linuxbridge, sriov and macvtap + agents |
description: | updated |
description: | updated |
tags: | removed: ovs |
Changed in neutron: | |
importance: | Undecided → Wishlist |
tags: |
added: rfe-approved removed: rfe |
summary: |
- Create a modular L2 agent framework for linuxbridge, sriov and macvtap - agents + [RFE] Create a modular L2 agent framework for linuxbridge, sriov and + macvtap agents |
Changed in neutron: | |
milestone: | none → mitaka-1 |
Changed in neutron: | |
assignee: | Andreas Scheuring (andreas-scheuring) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
milestone: | mitaka-1 → mitaka-2 |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Andreas Scheuring (andreas-scheuring) |
Changed in neutron: | |
assignee: | Andreas Scheuring (andreas-scheuring) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Andreas Scheuring (andreas-scheuring) |
Changed in neutron: | |
assignee: | Andreas Scheuring (andreas-scheuring) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Andreas Scheuring (andreas-scheuring) |
Changed in neutron: | |
assignee: | Andreas Scheuring (andreas-scheuring) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Andreas Scheuring (andreas-scheuring) |
Changed in neutron: | |
assignee: | Andreas Scheuring (andreas-scheuring) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Ihar Hrachyshka (ihar-hrachyshka) |
Changed in neutron: | |
assignee: | Ihar Hrachyshka (ihar-hrachyshka) → Slawek Kaplonski (slaweq) |
Changed in neutron: | |
assignee: | Slawek Kaplonski (slaweq) → Ihar Hrachyshka (ihar-hrachyshka) |
Changed in neutron: | |
assignee: | Ihar Hrachyshka (ihar-hrachyshka) → Andreas Scheuring (andreas-scheuring) |
Changed in neutron: | |
assignee: | nobody → Andreas Scheuring (andreas-scheuring) |
status: | Incomplete → In Progress |
Changed in neutron: | |
milestone: | none → mitaka-3 |
This seems like a reasonable thing to do. I'd argue that once we have the reference implementation split out we could quite easily do this in that repository. This does seem quite invasive, so I'd really like Kevin and Yamamoto to comment here. I've added them to this bug.