Juan Pablo L. wrote: > Hi, i have downloaded and installed freeradius from git master > FreeRADIUS Version 3.0.0 (git #7a9281c), > i m developing a module to do some charging based on 3gpp2 standards for > a cdma network,
That seems nice. > i have modified the dictionary to reflect a subtype in one of the > attributes: > > ATTRIBUTE 3GPP2-Prepaid-acct-Capability 91 tlv > ATTRIBUTE 3GPP2-Prepaid-acct-Capability-AvailableInClient 91.1 > integer OK. That should work. > but i m having trouble > accesing 3GPP2-Prepaid-acct-Capability-AvailableInClient, > basically i dont know how and i cant find an example in the code so far. The rest of the code largely doesn't look up TLVs. So there are no examples. > when i do: > > ppac = pairfind(request->packet->vps,91.1,5535,TAG_ANY) Well... that won't work. "99.1" is a float, and the function takes an integer. The FreeRADIUS code packs multiple TLV numbers into a 32-bit "int" via various horrible packing mechanisms. You don't want to know how that packing is done... You *can* look up attributes by name, though. > they both return null. The first one should also return a compile error. That should be a red flag saying "this is wrong". > any hint will be appreciated as to how can i > access the values in the subtypes > of any tlv-type attribute. the other option is just put back the > dictionary to octect type and access the values manually > but i know this version of freeradius supports tlv so i would like to > find a way to do it using freeradius My $0.02 is to look up the name when the module starts, and then cache it.: typedef struct rlm_foo_t { DICT_ATTR const *ppa_cap; ... } rlm_foo_t; Then in the "instantiate" routine, do: inst->ppa_cap = dict_attrbyname("3GPP2-Prepaid-acct-Capability-AvailableInClient"); Then in the lookup code, do: pairfind(request->packet->vps, inst->ppa_cap->attr, inst->ppa_cap->vendor, TAG_ANY); Which is a bit more awkward, but it should work. I would also suggest paying *close* attention to compiler warnings. Passing "99.1" to a function expecting an "int" should cause you to re-think your entire approach. Alan DeKok. - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html