diff options
Diffstat (limited to 'include/net/ip.h')
| -rw-r--r-- | include/net/ip.h | 10 |
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 | ||
| 269 | static inline void ip_ib_mc_map(__be32 naddr, char *buf) | 269 | static 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; |
