aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/ip.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/ip.h')
-rw-r--r--include/net/ip.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/include/net/ip.h b/include/net/ip.h
index 840dd91b513b..50c8889b1b8d 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -266,20 +266,22 @@ static inline void ip_eth_mc_map(__be32 naddr, char *buf)
266 * Leave P_Key as 0 to be filled in by driver. 266 * Leave P_Key as 0 to be filled in by driver.
267 */ 267 */
268 268
269static inline void ip_ib_mc_map(__be32 naddr, char *buf) 269static inline void ip_ib_mc_map(__be32 naddr, const unsigned char *broadcast, char *buf)
270{ 270{
271 __u32 addr; 271 __u32 addr;
272 unsigned char scope = broadcast[5] & 0xF;
273
272 buf[0] = 0; /* Reserved */ 274 buf[0] = 0; /* Reserved */
273 buf[1] = 0xff; /* Multicast QPN */ 275 buf[1] = 0xff; /* Multicast QPN */
274 buf[2] = 0xff; 276 buf[2] = 0xff;
275 buf[3] = 0xff; 277 buf[3] = 0xff;
276 addr = ntohl(naddr); 278 addr = ntohl(naddr);
277 buf[4] = 0xff; 279 buf[4] = 0xff;
278 buf[5] = 0x12; /* link local scope */ 280 buf[5] = 0x10 | scope; /* scope from broadcast address */
279 buf[6] = 0x40; /* IPv4 signature */ 281 buf[6] = 0x40; /* IPv4 signature */
280 buf[7] = 0x1b; 282 buf[7] = 0x1b;
281 buf[8] = 0; /* P_Key */ 283 buf[8] = broadcast[8]; /* P_Key */
282 buf[9] = 0; 284 buf[9] = broadcast[9];
283 buf[10] = 0; 285 buf[10] = 0;
284 buf[11] = 0; 286 buf[11] = 0;
285 buf[12] = 0; 287 buf[12] = 0;