ibsim: support MFT for switches with up to 48 ports
PATCH 1/1 ibsim: support MFT for switches with up to 48 ports
support MFT for switches with up to 48 ports
--- ibsim/sim.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
ibsim/sim.h +2 -2
@@ -45,8 +45,8 @@#define MAXLINEARCAP (30*1024)#define MAXMCASTCAP 1024#define LASTBLOCK32 (MAXMCASTCAP/32-1) -// NUMBEROFPORTMASK means that 32port switches could only be build -#define NUMBEROFPORTMASK 2 +// NUMBEROFPORTMASK means that 48port switches could only be build +#define NUMBEROFPORTMASK 3#define LASTPORTMASK (NUMBEROFPORTMASK-1)// linkwidth == 4X - must be one width only 1,2 or 8 #define LINKWIDTH_1x 1
Signature · 6 lines
1.5.5 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH v2] ibsim: allocate mft according to number of switch ports
allocate mft according to number of switch ports
calculate number of port masks according to number of switch ports and allocate MFT accordingly
--- ibsim/sim.h | 5 ++--- ibsim/sim_mad.c | 5 +++-- ibsim/sim_net.c | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-)
ibsim/sim.h +2 -3
@@ -45,9 +45,7 @@#define MAXLINEARCAP (30*1024)#define MAXMCASTCAP 1024#define LASTBLOCK32 (MAXMCASTCAP/32-1) -// NUMBEROFPORTMASK means that 32port switches could only be build -#define NUMBEROFPORTMASK 2 -#define LASTPORTMASK (NUMBEROFPORTMASK-1) +#define MCASTMASKSIZE 16// linkwidth == 4X - must be one width only 1,2 or 8 #define LINKWIDTH_1x 1#define LINKWIDTH_4x 2
@@ -229,6 +227,7 @@ struct Switch {int linearFDBtop;int portchange;int lifetime; +int numportmask;uint8_t switchinfo[64 ];Node *node;uint8_t *fdb;
ibsim/sim_mad.c +3 -2
@@ -513,18 +513,19 @@ static int do_multicastforwtbl(Port * port, unsigned op, uint32_t mod,int blockposition;Switch *sw = port->node->sw; +int lastportmask = sw->numportmask +1 ;if (!sw)// not a Switch? return ERR_ATTR_UNSUPPORTED ;VERB ("requested : Block32 %d PortMask %d" , numBlock32, numPortMsk); -if (numBlock32 >LASTBLOCK32 || numPortMsk >LASTPORTMASK ) { +if (numBlock32 >LASTBLOCK32 || numPortMsk > lastportmask) {int8_t zeroblock[64 ] = {0 };mad_set_array (data,0 ,IB_MULTICAST_FORW_TBL_F , zeroblock);return 0 ; } - blockposition = (numBlock32 *NUMBEROFPORTMASK + numPortMsk) *64 ; + blockposition = (numBlock32 * sw->numportmask + numPortMsk) *64 ;if (op ==IB_MAD_METHOD_SET )mad_get_array (data,0 ,IB_MULTICAST_FORW_TBL_F , sw->mfdb + blockposition);
ibsim/sim_net.c +3 -2
@@ -245,6 +245,7 @@ static Switch *new_switch(Node * nd, int set_esp0) sw->node = nd; sw->linearcap = maxlinearcap;// assume identical val for all switches sw->multicastcap = maxmcastcap;// assume identical val for all switches + sw->numportmask = (nd->numports +MCASTMASKSIZE ) /MCASTMASKSIZE ;memcpy (sw->switchinfo, switchinfo,sizeof (sw->switchinfo));mad_set_field (sw->switchinfo,0 ,IB_SW_LINEAR_FDB_CAP_F , sw->linearcap); mad_set_field(sw->switchinfo, 0, IB_SW_MCAST_FDB_CAP_F,
@@ -253,13 +254,13 @@ static Switch *new_switch(Node * nd, int set_esp0)mad_set_field (sw->switchinfo,0 ,IB_SW_ENHANCED_PORT0_F , set_esp0 >0 ); sw->fdb =malloc (maxlinearcap*sizeof (sw->fdb[0 ])); - sw->mfdb =malloc (maxmcastcap*NUMBEROFPORTMASK *sizeof (uint16_t )); + sw->mfdb =malloc (maxmcastcap * sw->numportmask *sizeof (uint16_t ));if (!sw->fdb || !sw->mfdb) {IBPANIC ("new_switch: no mem: %m" );return NULL ; }memset (sw->fdb,0xff , maxlinearcap*sizeof (sw->fdb[0 ])); -memset (sw->mfdb,0 , maxmcastcap*NUMBEROFPORTMASK *sizeof (uint16_t )); +memset (sw->mfdb,0 , maxmcastcap * sw->numportmask *sizeof (uint16_t ));return sw; }
Signature · 6 lines
1.7.2.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH v2] ibsim: allocate mft according to number of switch ports
Sasha,
It seems that you've missed this patch.
Please apply.
Thanks,
Eli
Quoted 79 lines · Eli Dorfman (Voltaire)
allocate mft according to number of switch ports
calculate number of port masks according to number of switch ports and allocate MFT accordingly
--- ibsim/sim.h | 5 ++--- ibsim/sim_mad.c | 5 +++-- ibsim/sim_net.c | 5 +++-- 3 files changed, 8 insertions(+), 7 deletions(-)ibsim/sim.h +2
-3@@ -45,9 +45,7 @@#define MAXLINEARCAP (30*1024)#define MAXMCASTCAP 1024#define LASTBLOCK32 (MAXMCASTCAP/32-1) -// NUMBEROFPORTMASK means that 32port switches could only be build -#define NUMBEROFPORTMASK 2 -#define LASTPORTMASK (NUMBEROFPORTMASK-1) +#define MCASTMASKSIZE 16// linkwidth == 4X - must be one width only 1,2 or 8 #define LINKWIDTH_1x 1#define LINKWIDTH_4x 2@@ -229,6 +227,7 @@ struct Switch {int linearFDBtop;int portchange;int lifetime; +int numportmask;uint8_t switchinfo[64 ];Node *node;uint8_t *fdb;ibsim/sim_mad.c +3
-2@@ -513,18 +513,19 @@ static int do_multicastforwtbl(Port * port, unsigned op, uint32_t mod,int blockposition;Switch *sw = port->node->sw; +int lastportmask = sw->numportmask +1 ;if (!sw)// not a Switch? return ERR_ATTR_UNSUPPORTED ;VERB ("requested : Block32 %d PortMask %d" , numBlock32, numPortMsk); -if (numBlock32 >LASTBLOCK32 || numPortMsk >LASTPORTMASK ) { +if (numBlock32 >LASTBLOCK32 || numPortMsk > lastportmask) {int8_t zeroblock[64 ] = {0 };mad_set_array (data,0 ,IB_MULTICAST_FORW_TBL_F , zeroblock);return 0 ; } - blockposition = (numBlock32 *NUMBEROFPORTMASK + numPortMsk) *64 ; + blockposition = (numBlock32 * sw->numportmask + numPortMsk) *64 ;if (op ==IB_MAD_METHOD_SET )mad_get_array (data,0 ,IB_MULTICAST_FORW_TBL_F , sw->mfdb + blockposition);ibsim/sim_net.c +2
-1@@ -245,6 +245,7 @@ static Switch *new_switch(Node * nd, int set_esp0) sw->node = nd; sw->linearcap = maxlinearcap;// assume identical val for all switches sw->multicastcap = maxmcastcap;// assume identical val for all switches + sw->numportmask = (nd->numports +MCASTMASKSIZE ) /MCASTMASKSIZE ;memcpy (sw->switchinfo, switchinfo,sizeof (sw->switchinfo));mad_set_field (sw->switchinfo,0 ,IB_SW_LINEAR_FDB_CAP_F , sw->linearcap); mad_set_field(sw->switchinfo, 0, IB_SW_MCAST_FDB_CAP_F,@@ -253,13 +254,13 @@ static Switch *new_switch(Node * nd, int set_esp0)mad_set_field (sw->switchinfo,0 ,IB_SW_ENHANCED_PORT0_F , set_esp0 >0 ); sw->fdb =malloc (maxlinearcap*sizeof (sw->fdb[0 ])); - sw->mfdb =malloc (maxmcastcap*NUMBEROFPORTMASK *sizeof (uint16_t )); + sw->mfdb =malloc (maxmcastcap * sw->numportmask *sizeof (uint16_t ));
ibsim/sim_net.c static Switch *new_switch(Node * nd, int set_esp0) · line 266
Quoted 10 lines
ibsim/sim_net.c +1
-1if (!sw->fdb || !sw->mfdb) {IBPANIC ("new_switch: no mem: %m" );return NULL ; }memset (sw->fdb,0xff , maxlinearcap*sizeof (sw->fdb[0 ])); -memset (sw->mfdb,0 , maxmcastcap*NUMBEROFPORTMASK *sizeof (uint16_t )); +memset (sw->mfdb,0 , maxmcastcap * sw->numportmask *sizeof (uint16_t ));return sw; }
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html