|
@@ -48,8 +48,29 @@ struct eoib_device {
|
48
|
48
|
|
49
|
49
|
/** Peer cache */
|
50
|
50
|
struct list_head peers;
|
|
51
|
+
|
|
52
|
+ /** Multicast group additional component mask */
|
|
53
|
+ unsigned int mask;
|
51
|
54
|
};
|
52
|
55
|
|
|
56
|
+/**
|
|
57
|
+ * Force creation of multicast group
|
|
58
|
+ *
|
|
59
|
+ * @v eoib EoIB device
|
|
60
|
+ */
|
|
61
|
+static inline void eoib_force_group_creation ( struct eoib_device *eoib ) {
|
|
62
|
+
|
|
63
|
+ /* Some dubious EoIB implementations require each endpoint to
|
|
64
|
+ * force the creation of the multicast group. Yes, this makes
|
|
65
|
+ * it impossible for the group parameters (e.g. SL) to ever be
|
|
66
|
+ * modified without breaking backwards compatiblity with every
|
|
67
|
+ * existing driver.
|
|
68
|
+ */
|
|
69
|
+ eoib->mask = ( IB_SA_MCMEMBER_REC_PKEY | IB_SA_MCMEMBER_REC_QKEY |
|
|
70
|
+ IB_SA_MCMEMBER_REC_SL | IB_SA_MCMEMBER_REC_FLOW_LABEL |
|
|
71
|
+ IB_SA_MCMEMBER_REC_TRAFFIC_CLASS );
|
|
72
|
+}
|
|
73
|
+
|
53
|
74
|
extern int eoib_create ( struct ib_device *ibdev, const uint8_t *hw_addr,
|
54
|
75
|
struct ib_address_vector *broadcast,
|
55
|
76
|
const char *name );
|