[openib-general] Get Table Records for SA Attribute ID ?

Hal Rosenstock halr at voltaire.com
Fri Feb 24 13:45:24 PST 2006


Hi again Takshak,

On Fri, 2006-02-24 at 15:46, Takshak C. wrote:
> Hi Hal:
> 
> Thanks. Basically, I m using the following flow in my application:
> 
>     status = opensm_init(&options, (osm_log_level_t) log_flags );
>     // Get some portID where you need to bind this SM
>     if ( guid == 0 && !(guid = get_port_guid(guid, &port_attr)))
>     {
>         printf("\n We can't proceed further without port_guid \n");
>         exit(0);
>     }
>     status = opensm_bind(&port_attr) ;

Why are you calling opensm_init/bind ? That's why it requires OpenSM
(not sure which pieces this pulls in).

Look at main.c/osmtest.c as to how it initializes (osmtest_init/bind)
and you should on your way...

-- Hal

>     // The above function internally calls
>     // osmv_bind_sa(...) function of libvendor library.
> 
>     Then, I m calling opensm_saquery()..this function prepares
>     the query request and calls
>     status = osmv_query_sa(openSMObject.h_bind, &req) ;
> 
> So, I believe, I m not playing with transaction ID here.
> Thus, I m wondering what could have been happened with transaction ID
> mismatched. I have attached my application code file along with this mail
> for your kind reference. Please take a look.
> 
> I m also trying to figure out what initilization has been done by openSM
> instance which is not happening through my normal application startup
> time.
> 
> One thing, I have observed is as below which might help me to get your
> comments:
> 
> 1. I Start openSM instance in one terminal. It says Subnet is up and it is
> Master.
> 2. On other terminal when I start my attached application, then openSM
> terminal says I m processing the MAD ( osm_sa_mad_ctrl.c processing
> function ).
> 
> It means that, my application acts as a client and openSM acting as a
> server to serve the request. I would like to deattached this client and
> server communication. This is my current goal.
> 
> If you could point to me what exactly I need to do for this then it would
> be great help. If you could point me to the documentation then it would
> also help me to understand the communication between the client and openSM
> as a server.
> 
> Thanks and Regards,
> - Takshak
> 
> 
> 
> > Hi Takshak,
> >
> > On Fri, 2006-02-24 at 08:09, Takshak C. wrote:
> >> Hi Hal:
> >>
> >> Thanks for the information.
> >>
> >> I would like to confirm that, umad_send() and umad_recv calls goes out
> >> of osm libraries.
> >
> > Not sure what you mean by this. The umad library of which those calls
> > are a part of is underneath any OSM libraries that might be used.
> >
> >> I have written an application to get PATH_RECORDS using opensm libraries
> >> similar to osmtest.
> >> If I don't start openSM instance, then I don't get results rather I get
> >> an error message as
> >> below:
> >> [ umad_receiver: ERR 5409: send completed with error (method=0x12
> >> attr=0x35 trans_id=0x1) -- dropping ]
> >
> > That's saying that a matching receive was not seen (the response to the
> > GetTable PathRecord request). The transaction ID looks funny to me for
> > matching. Is this being set correctly ? (Not having the code it is hard
> > for me to tell how things are initialized and what mode this is working
> > in).
> >
> >> I have tried to go inside. Just after umad_send() call in
> >> osm_vendor_ibumad.c ( osm_vendor_send() function ),
> >> I called umad_recv() function call and tried to check the receive
> >> length. And I am getting 24.
> >>
> >> Why this could have been happened ? return length = 24 means call has
> >> not received path records.
> >
> > Because if it is getting a response, due to the transaction ID, I do not
> > think it is considered a match. I can't be sure with the info provided.
> >
> >> But if I start openSM instance then I get proper result length.
> >
> > Sounds like your application may have an initialization issue that this
> > fixes.
> >
> >> I would like to remove dependency of starting this openSM instance and
> >> my application program
> >> should run independently.
> >
> > This should be possible.
> >
> >> Could you please throw me some light on this. When I have called
> >> umad_recv() it should not depend
> >> on openSM instance I believe to received the things.
> >
> > Correct.
> >
> > -- Hal
> >
> >> Thanks & Regards.
> >> - Takshak
> >>
> >>
> >> Hal Rosenstock wrote:
> >> > On Wed, 2006-02-22 at 08:09, Takshak C. wrote:
> >> > > Thanks a lot Hal, for clearing my doubts.
> >> > > I would like to redefine my problem based on your inputs.
> >> > >
> >> > > I am into a scenario, where vendor specific primary SM is running in
> >> > > the subnet.
> >> > > This running SM is different than openSM. I have loaded an openIB
> >> > > stack on the host.
> >> >
> >> > OK. I understand your configuration.
> >> >
> >> > > Some of the sample examples from management/diags/src/ directory
> >> like
> >> > > smpquery
> >> > > for nodeinfo etc works and gives result to me.
> >> > >
> >> > > Now, could it be possible for me to write a SA query and fetch the
> >> > > path, service
> >> > > or info records
> >> >
> >> > Info records ?
> >> >
> >> > >  without starting openSM instance as I have already primary SM
> >> > > running in the subnet. ?
> >> >
> >> > Yes; all you are (conceptually) talking about is a user SA client.
> >> >
> >> > >  I believe, this question could be right and your answer would
> >> > > help me.
> >> > >
> >> > > I do not want to start openSM because then synchronization between
> >> > > primary SM
> >> > > and openSM would bring other issues or difficulties.
> >> >
> >> > Understood. It was unclear whether you had an SM in your subnet.
> >> >
> >> > You should be able to link libopensm and the other management
> >> libraries
> >> > to an SA application which would do this (and not require OpenSM
> >> > itself).
> >> >
> >> > > Could you please tell me, how should I go about it ? Waiting.
> >> >
> >> > I think I've already answered this.
> >> >
> >> > -- Hal
> >> >
> >> > > Regards.
> >> > > - Takshak
> >> > >
> >> > >
> >> > >
> >> > > Hal Rosenstock wrote:
> >> > > > On Wed, 2006-02-22 at 06:56, Takshak C. wrote:
> >> > > >
> >> > > > > Hal Rosenstock wrote:
> >> > > > >
> >> > > > > > > Please throw some light on this. Do you have any userspace
> >> SA support for retrieving path, service record
> >> > > > > > > information ?
> >> > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > > > There have been discussions about userspace SA support but
> >> nothing
> >> > > > > > currently for OpenIB (gen2). Currently, you can get this by
> >> using
> >> > > > > >
> >> > > > > >
> >> > > > >
> >> > > > > Could you please tell me, when userspace SA support will be
> >> available
> >> > > > > in openIB gen2.
> >> > > > >
> >> > > >
> >> > > > I don't know but I'm not sure how much this helps you based on
> >> your
> >> > > > questions below.
> >> > > >
> >> > > >
> >> > > > > > osm_vendor_ibumad_sa.c which supports most SA requests. It is
> >> built as
> >> > > > > > part of libosmvendor (part of the OpenSM build) but can be
> >> used outside
> >> > > > > > of OpenSM. It is used by osmtest if you want to look at some
> >> use cases.
> >> > > > > > It obtains PathRecords and ServiceRecords. That might be an
> >> easier
> >> > > > > > direction to go than trying to use the management libraries to
> >> build the
> >> > > > > > pieces of a userspace SA client you want.
> >> > > > > >
> >> > > > > > -- Hal
> >> > > > > >
> >> > > > > >
> >> > > > >
> >> > > > > See, to execute osmtest, I found that openSM instance must be
> >> there.
> >> > > > >
> >> > > >
> >> > > > Must be where ? What is your IB configuration ?
> >> > > >
> >> > > >
> >> > > > >  So, even if I use part
> >> > > > > of libosmvendor library ( osm_vendor_ibumad_sa.c) functions, I
> >> have to
> >> > > > > start openSM
> >> > > > > instance to execute the SA query successfully.
> >> > > > >
> >> > > >
> >> > > > An SM is needed in the subnet and SA is part of that and answers
> >> such
> >> > > > queries.
> >> > > >
> >> > > >
> >> > > > > Without starting openSM client, I m able to retrieve node
> >> description,
> >> > > > > node info, SM info,
> >> > > > > port info by using management libraries libibumad and libibmad.
> >> > > > >
> >> > > >
> >> > > > of the local node only (until the SM brings up the subnet).
> >> > > >
> >> > > >
> >> > > > > What I want to achieve is, without talking with openSM instance,
> >> my SA
> >> > > > > query client
> >> > > > > should go and get the required information.
> >> > > > >
> >> > > >
> >> > > > Why ?
> >> > > >
> >> > > >
> >> > > > > Is this possible ?.
> >> > > > >
> >> > > >
> >> > > > No. What would you query for paths to if the subnet were not up ?
> >> > > >
> >> > > > -- Hal
> >> > > >
> >> > > >
> >> > > > > Would like to know your inputs on this.
> >> > > > >
> >> > > > > Regards,
> >> > > > > - Takshak
> >> > > > >
> >> > > > > > > Regards.
> >> > > > > > > - Takshak
> >> > > > > > >
> >> > > > > > >
> >> > > > > > > Hal Rosenstock wrote:
> >> > > > > > >
> >> > > > > > >
> >> > > > > > >
> >> > > > > > > > Hi,
> >> > > > > > > >
> >> > > > > > > > There are a couple of issues with the below.
> >> > > > > > > >
> >> > > > > > > > 1. SA MAD structure is missing the RMPP header. Once I saw
> >> that I didn't check for further issues with the format.
> >> > > > > > > >
> >> > > > > > > > 2. I will assume your register call sets RMPP.
> >> > > > > > > >
> >> > > > > > > > 3. SA class version is 2.
> >> > > > > > > >
> >> > > > > > > > What SM are you using ? If you are using OpenSM, you can
> >> turn on verbose and see if the packet is seen by the SM.
> >> You could also enable madeye (in utils) to see if the
> >> packet is sent (and if anything is received back).
> >> > > > > > > >
> >> > > > > > > > -- Hal
> >> > > > > > > >
> >> > > > > > > > ________________________________
> >> > > > > > > >
> >> > > > > > > > From: openib-general-bounces at openib.org on behalf of
> >> Takshak C.
> >> > > > > > > > Sent: Mon 2/6/2006 8:00 AM
> >> > > > > > > > To: openib-general at openib.org
> >> > > > > > > > Subject: [openib-general] Get Table Records for SA
> >> Attribute ID ?
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > > Hi,
> >> > > > > > > >
> >> > > > > > > > I m trying to get the table records for SA attribute ID in
> >> following way.
> >> > > > > > > > But, I m not getting a single record, could anyone comment
> >> on the problem.
> >> > > > > > > >
> >> > > > > > > > 1. I have created saMadFormat structure described in the
> >> specification as below:
> >> > > > > > > >
> >> > > > > > > > struct saMadFormat
> >> > > > > > > > {
> >> > > > > > > >
> >> > > > > > > >    uint8_t base_version ;
> >> > > > > > > >    uint8_t mgmt_class ;
> >> > > > > > > >    uint8_t class_version ;
> >> > > > > > > >    uint8_t sa_method ;
> >> > > > > > > >    uint16_t    status ;
> >> > > > > > > >    uint16_t    not_used ;
> >> > > > > > > >    uint64_t    tid ;
> >> > > > > > > >    uint16_t    attr_id ;
> >> > > > > > > >    uint16_t    resv ;
> >> > > > > > > >    uint32_t    attr_mod ;
> >> > > > > > > >    uint64_t    sa_key;
> >> > > > > > > >    uint64_t    sm_key ;
> >> > > > > > > >    uint32_t    seg_num ;
> >> > > > > > > >    uint32_t    payload_len ;
> >> > > > > > > >    uint8_t     frag_flag ;
> >> > > > > > > >    uint8_t edit_mod ;
> >> > > > > > > >    uint16_t    window ;
> >> > > > > > > >    uint32_t    endRID ;
> >> > > > > > > >    uint64_t    comp_mask ;
> >> > > > > > > >    uint8_t adminData[192] ;
> >> > > > > > > > };
> >> > > > > > > >
> >> > > > > > > > 2. Then I have done all the basic operations like
> >> umad_open, umad_register for the IB_SA_CLASS
> >> > > > > > > >   and umad_open_port etc successfully.
> >> > > > > > > >
> >> > > > > > > > 3. struct saMadFormat *saQuery = (struct
> >> saMadFormat*)(umad_get_mad(umad));
> >> > > > > > > >   memset(saQuery, 0, sizeof(*saQuery));
> >> > > > > > > >
> >> > > > > > > >   saQuery->base_version = 1;
> >> > > > > > > >   saQuery->mgmt_class = IB_SA_CLASS ;
> >> > > > > > > >   saQuery->class_version = 1 ;
> >> > > > > > > >   saQuery->sa_method = IB_MAD_METHOD_GET_TABLE ;
> >> > > > > > > >   saQuery->attr_id = IB_SA_ATTR_PATHRECORD ;
> >> > > > > > > >   saQuery->attr_mod = 0 ;
> >> > > > > > > >   saQuery->tid  = htonll(drmad_tid++);
> >> > > > > > > >   saQuery->endRID = 0 ;
> >> > > > > > > >
> >> > > > > > > >   umad_set_addr(umad, lid, 1, 0, IB_DEFAULT_QP1_QKEY);
> >> > > > > > > >   umad_set_grh(umad, 0);
> >> > > > > > > >   umad_set_pkey(umad, 0xFFFF);
> >> > > > > > > >
> >> > > > > > > > 4. length = IB_MAD_SIZE;
> >> > > > > > > >
> >> > > > > > > >  if (umad_send(portid, mad_agent, umad, length,
> >> timeout_ms, 0) < 0)
> >> > > > > > > >     IBPANIC("send failed");
> >> > > > > > > >
> >> > > > > > > >  if (umad_recv(portid, umad, &length, -1) != mad_agent)
> >> > > > > > > >     IBPANIC("recv error: %s", drmad_status_str(saQuery));
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >  if (!dump_char) {
> >> > > > > > > >      xdump(stdout, 0, saQuery->adminData, 192);
> >> > > > > > > >      return 0;
> >> > > > > > > >   }
> >> > > > > > > >
> >> > > > > > > > I m expecting that, I will get the resultant data in
> >> saQuery->adminData.
> >> > > > > > > > Is this correct ? If not then, how should I retrieve the
> >> table records ?
> >> > > > > > > > Any Idea ?
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > > Thanks
> >> > > > > > > > - Takshak
> >> > > > > > > >
> >> > > > > > > > _______________________________________________
> >> > > > > > > > openib-general mailing list
> >> > > > > > > > openib-general at openib.org
> >> > > > > > > > http://openib.org/mailman/listinfo/openib-general
> >> > > > > > > >
> >> > > > > > > > To unsubscribe, please visit
> >> http://openib.org/mailman/listinfo/openib-general
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > > > >
> >> > > > > >
> >> > > > > >
> >> > > >
> >> > > >
> >> >
> >>
> >
> >




More information about the general mailing list