mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 13:30:57 +03:00
[eoib] Support non-FullMember gateway devices
Some EoIB implementations utilise an EoIB-to-Ethernet gateway device that does not perform a FullMember join to the multicast group for the EoIB broadcast domain. This has various exciting side-effects, such as requiring every EoIB node to send every broadcast packet twice. As an added bonus, the gateway may also break the EoIB MAC address to GID mapping protocol by sending Ethernet-sourced packets from the wrong QPN. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -49,10 +49,30 @@ struct eoib_device {
|
||||
/** Peer cache */
|
||||
struct list_head peers;
|
||||
|
||||
/** Send duplicate packet to gateway (or NULL)
|
||||
*
|
||||
* @v eoib EoIB device
|
||||
* @v original Original I/O buffer
|
||||
*/
|
||||
void ( * duplicate ) ( struct eoib_device *eoib,
|
||||
struct io_buffer *original );
|
||||
/** Gateway (if any) */
|
||||
struct ib_address_vector gateway;
|
||||
/** Multicast group additional component mask */
|
||||
unsigned int mask;
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if EoIB device uses a gateway
|
||||
*
|
||||
* @v eoib EoIB device
|
||||
* @v has_gw EoIB device uses a gateway
|
||||
*/
|
||||
static inline int eoib_has_gateway ( struct eoib_device *eoib ) {
|
||||
|
||||
return ( eoib->duplicate != NULL );
|
||||
}
|
||||
|
||||
/**
|
||||
* Force creation of multicast group
|
||||
*
|
||||
@@ -77,5 +97,7 @@ extern int eoib_create ( struct ib_device *ibdev, const uint8_t *hw_addr,
|
||||
extern struct eoib_device * eoib_find ( struct ib_device *ibdev,
|
||||
const uint8_t *hw_addr );
|
||||
extern void eoib_destroy ( struct eoib_device *eoib );
|
||||
extern void eoib_set_gateway ( struct eoib_device *eoib,
|
||||
struct ib_address_vector *av );
|
||||
|
||||
#endif /* _IPXE_EOIB_H */
|
||||
|
||||
Reference in New Issue
Block a user