- Community Home
- >
- Networking
- >
- Software Defined Networking
- >
- How to listen to MESSAGE_TX Events
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Forums
Discussions
Discussions
Discussions
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-19-2016 09:57 AM - edited 12-19-2016 10:06 AM
12-19-2016 09:57 AM - edited 12-19-2016 10:06 AM
How to listen to MESSAGE_TX Events
Hi,
My application is able to listen to Error Messages by implementing the MessageListener interface. Whenever an error occurs due to FLOW_MOD_FAILED#TABLE_FULL I am able to get the RX message and extract info like the transaction id (xid). However, in order for the xid to be useful, I'd need to store or know info about the corresponding TX message that caused the error (in particular the cookie value of the sent flow mod). How to do that?
HP's API doc states "Note that the MESSAGE_TX event type will never be seen by a message listener;" so I don't know how to get it.
One solution is to sendConfirmedFlowMods but due to its blocking nature my application significantly slows down. Errors are not frequent and that's why I use unconfirmed flowmods but I do need to capture them when the table is full.
Thanks in advance.
Checho
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-20-2016 08:15 AM
12-20-2016 08:15 AM
Re: How to listen to MESSAGE_TX Events
Hi checho,
The VAN controller is designed to achieve significant performance in regard to packet processing (packet-in, packet-out) to exceed 2 million packets per second. Therefore we do not support a message listener that will listen on TX because that would slow the processing.
For your solution, would it be an acceptable workaround to do the following?
Workaround option #A:
- Create a MessageListener and listen for an error response
- Start sending unconfirmed flowmods, remembering the order they were sent
- When an error response is received, change to confirmed flowmods.
- Work backwards from the most recent flowmod to find which flowmods are rejected. Once you reach a flowmod that is accepted, you'll have the list of flowmods that exceeded the table limit.
Workaround option #B:
- Create a MessageListener and listen for an error response
- Start sending unconfirmed flowmods, remembering the order they were sent
- When an error response is received, query the switch for the flowmods using ControllerService.getFlowStats(DataPathId, TableId).
- Copy the cookie value from each MBodyFlowStats into a Map.
- Work backwards from the most recent flowmod to see which cookies exist in the list retrieved from the switch.
We realize the workaround above isn't the most convenient method, and that it would be more convenient to be able to know the transaction ID before the message is sent. However, in order to keep transaction ordering consistent we must generate the transaction ID just prior to sending the message.
By the way, I'm assuming that the flowmods you're using have either a hard_timeout or idle_timeout specified, otherwise your app would know how many flowmods it has pushed to a switch (and therefore how many flows still exist on the switch). Assuming you're using switches with a known table size, you could perform that calculation before ever pushing a flowmod (so you'd never get an ERROR).
Shaun
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-21-2016 03:26 PM
12-21-2016 03:26 PM
Re: How to listen to MESSAGE_TX Events
Too bad that it is not possible to listen to TX events but I understand the design decision behind that fact. Thank you for providing us with workarounds. I will get back if we come up with another alternative.