mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 14:11:20 +00:00
IPoIB: improve IPv4/IPv6 to IB mcast mapping functions
An IPoIB subnet on an IB fabric that spans multiple IB subnets can't use link-local scope in multicast GIDs. The existing routines that map IP/IPv6 multicast addresses into IB link-level addresses hard-code the scope to link-local, and they also leave the partition key field uninitialised. This patch adds a parameter (the link-level broadcast address) to the mapping routines, allowing them to initialise both the scope and the P_Key appropriately, and fixes up the call sites. The next step will be to add a way to configure the scope for an IPoIB interface. Signed-off-by: Rolf Manderscheid <rvm@obsidianresearch.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
755807a296
commit
a9e527e3f9
6 changed files with 16 additions and 17 deletions
|
@ -266,20 +266,22 @@ static inline void ip_eth_mc_map(__be32 naddr, char *buf)
|
|||
* Leave P_Key as 0 to be filled in by driver.
|
||||
*/
|
||||
|
||||
static inline void ip_ib_mc_map(__be32 naddr, char *buf)
|
||||
static inline void ip_ib_mc_map(__be32 naddr, const unsigned char *broadcast, char *buf)
|
||||
{
|
||||
__u32 addr;
|
||||
unsigned char scope = broadcast[5] & 0xF;
|
||||
|
||||
buf[0] = 0; /* Reserved */
|
||||
buf[1] = 0xff; /* Multicast QPN */
|
||||
buf[2] = 0xff;
|
||||
buf[3] = 0xff;
|
||||
addr = ntohl(naddr);
|
||||
buf[4] = 0xff;
|
||||
buf[5] = 0x12; /* link local scope */
|
||||
buf[5] = 0x10 | scope; /* scope from broadcast address */
|
||||
buf[6] = 0x40; /* IPv4 signature */
|
||||
buf[7] = 0x1b;
|
||||
buf[8] = 0; /* P_Key */
|
||||
buf[9] = 0;
|
||||
buf[8] = broadcast[8]; /* P_Key */
|
||||
buf[9] = broadcast[9];
|
||||
buf[10] = 0;
|
||||
buf[11] = 0;
|
||||
buf[12] = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue