summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/eoib.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/include/ipxe/eoib.h b/src/include/ipxe/eoib.h
index c53880b5c..acae542b6 100644
--- a/src/include/ipxe/eoib.h
+++ b/src/include/ipxe/eoib.h
@@ -48,8 +48,29 @@ struct eoib_device {
/** Peer cache */
struct list_head peers;
+
+ /** Multicast group additional component mask */
+ unsigned int mask;
};
+/**
+ * Force creation of multicast group
+ *
+ * @v eoib EoIB device
+ */
+static inline void eoib_force_group_creation ( struct eoib_device *eoib ) {
+
+ /* Some dubious EoIB implementations require each endpoint to
+ * force the creation of the multicast group. Yes, this makes
+ * it impossible for the group parameters (e.g. SL) to ever be
+ * modified without breaking backwards compatiblity with every
+ * existing driver.
+ */
+ eoib->mask = ( IB_SA_MCMEMBER_REC_PKEY | IB_SA_MCMEMBER_REC_QKEY |
+ IB_SA_MCMEMBER_REC_SL | IB_SA_MCMEMBER_REC_FLOW_LABEL |
+ IB_SA_MCMEMBER_REC_TRAFFIC_CLASS );
+}
+
extern int eoib_create ( struct ib_device *ibdev, const uint8_t *hw_addr,
struct ib_address_vector *broadcast,
const char *name );