[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freeradius-users
Subject:    =?utf-8?B?UmU6IE1vZHVsZSBTdGF0aXN0aWNzIGluIGZyZWVyYWRpdXM=?=
From:       "Himanshu  Pandey" <pandey_himanshu80 () rediffmail ! com>
Date:       2014-09-27 13:41:10
Message-ID: 1411755198.S.8005.25675.F.H.TkFsYW4gRGVLb2sAUmU6IE1vZHVsZSBTdGF0aXN0aWNzIGluIGZyZWVyYWRpdXM_.RU.rfs310, rfs310, 829,
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Dear Alan,

I have completed my coding to achieve my task. I tried my best not to disturb much of \
the server code. Here is my code snippet. I request you to suggest me If my&nbsp; \
added code is correct or wrong. Also, suggest me if there is any other best way to \
achieve this or you think my added can be optimized more.

/* Structure */

/**&nbsp;&nbsp;&nbsp;&nbsp; Return codes indicating the result of the module call
&nbsp;*&nbsp; *
&nbsp;*&nbsp;&nbsp; *&nbsp; All module functions must return one of the codes listed \
below (apart from &nbsp;*&nbsp;&nbsp;&nbsp; * RLM_MODULE_NUMCODES, which is used to \
check for validity). &nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; */
typedef enum rlm_rcodes {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RLM_MODULE_REJECT = 0,&nbsp; //!&lt; \
Immediately reject the request. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_FAIL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Module failed, don't reply. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_OK,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; The module is OK, continue. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_HANDLED,&nbsp;&nbsp;&nbsp; //!&lt; The module handled the request, so \
stop. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_INVALID,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; The module considers \
the request invalid. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_USERLOCK,&nbsp; //!&lt; Reject the request (user is locked out). \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RLM_MODULE_NOTFOUND,&nbsp;&nbsp;&nbsp; \
//!&lt; User not found. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_NOOP,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; \
Module succeeded without doing anything. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_UPDATED,&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; OK (pairs modified). \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RLM_MODULE_NUMCODES,&nbsp; //!&lt; How \
many valid return codes there are. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_UNKNOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; Error resolving rcode \
(should not be &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; returned by modules). } rlm_rcode_t;

typedef struct module_t {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
magic;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Used to validate module struct. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
char const&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; The name of the module (without rlm_ prefix). \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; One or more of the RLM_TYPE_* constants. \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
inst_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; \
Size of the instance data &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONF_PARSER \
const&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*config;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Configuration information &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
instantiate_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
instantiate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Function to use for instantiation. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
detach_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
detach;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Function to use to free module instance. \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
packetmethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
methods[RLM_COMPONENT_COUNT];&nbsp;&nbsp; //!&lt; Pointers to the various \
section&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; \
//functions, ordering \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; determines which function is mapped &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; \
//to&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n!  \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; which section &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp!
  ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb!
  sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rtcode[RLM_MODULE_NUMCODES];&nbsp;&nbsp;&nbsp; //Used for module return \
codes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
 } module_t;

Now in function: modcall_recurse() I added

modcall_recurse() {

rlm_rcode_t result;
module_t const *module;

result = call_modsingle(c-&gt;method, sp, request);
module-&gt;rtcode[result] = module-&gt;rtcode[result] + 1;
}&nbsp; 

Also, in radius.c in function main I will use memset to initialize my rtcode array to \
zero. will add this statement:

memset(module-&gt;rtcode,0,sizeof(module-&gt;rtcode));

Regards,
Sonu


From: Alan DeKok &lt;aland@deployingradius.com&gt;
Sent: Fri, 26 Sep 2014 23:43:18 
To: FreeRadius users mailing list &lt;freeradius-users@lists.freeradius.org&gt;
Subject: Re: Module Statistics in freeradius
Himanshu Pandey wrote:

&gt; But as we discussed, the server does NOT keep track of statistics for

&gt; each module return codes.



 &nbsp;Yes... I've said that repeatedly. &nbsp;Perhaps you could repeat it some

more, to be sure that I understand how the server works?



&gt; The very first thing that I did was finding out the basic module

&gt; structure in freeradius, if I am not wrong this is the basic module

&gt; structure used:



 &nbsp;Yes.



&gt; Now I added an unsigned long array in this structure in which module

&gt; return code act as an index. Please see the snippet below:



 &nbsp;That's not a good idea. &nbsp;For one, the module return codes are already

in a typedef. &nbsp;Just use that one. &nbsp;There's no reason to create a new one.



 &nbsp;And "unsigned long" isn't used anywhere else in the server. &nbsp;Just use

"uint64_t".



&gt; Please advice me that how should I update this my unsigned long

&gt; rtcode[RLM_RETCODE_COUNT] array with each module return code.



 &nbsp;Use C code to increment the array entry. &nbsp;See modcall.c, \
call_modsingle().



 &nbsp;Alan DeKok.

-

List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html


[Attachment #5 (unknown)]

Dear Alan,<br><br>I have completed my coding to achieve my task. I tried my best not \
to disturb much of the server code. Here is my code snippet. I request you to suggest \
me If my&nbsp; added code is correct or wrong. Also, suggest me if there is any other \
best way to achieve this or you think my added can be optimized more.<br><br>/* \
Structure */<br><br>/**&nbsp;&nbsp;&nbsp;&nbsp; Return codes indicating the result of \
the module call<br>&nbsp;*&nbsp; *<br>&nbsp;*&nbsp;&nbsp; *&nbsp; All module \
functions must return one of the codes listed below (apart \
from<br>&nbsp;*&nbsp;&nbsp;&nbsp; * RLM_MODULE_NUMCODES, which is used to check for \
validity).<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; */<br>typedef enum rlm_rcodes \
{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RLM_MODULE_REJECT = 0,&nbsp; //!&lt; \
Immediately reject the request.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_FAIL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Module failed, don't reply.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_OK,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; The module is OK, continue.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_HANDLED,&nbsp;&nbsp;&nbsp; //!&lt; The module handled the request, so \
stop.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_INVALID,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; The module considers \
the request invalid.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_USERLOCK,&nbsp; //!&lt; Reject the request (user is locked \
out).<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_NOTFOUND,&nbsp;&nbsp;&nbsp; //!&lt; User not \
found.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_NOOP,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; \
Module succeeded without doing \
anything.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_UPDATED,&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; OK (pairs \
modified).<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RLM_MODULE_NUMCODES,&nbsp; \
//!&lt; How many valid return codes there \
are.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
RLM_MODULE_UNKNOWN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; Error resolving rcode \
(should not be<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; returned by modules).<br>} rlm_rcode_t;<br><br>typedef struct module_t \
{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
magic;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Used to validate module struct.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
char const&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; The name of the module (without rlm_ \
prefix).<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; One or more of the RLM_TYPE_* \
constants.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
inst_size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //!&lt; \
Size of the instance data<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CONF_PARSER \
const&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
*config;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Configuration information<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
instantiate_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
instantiate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Function to use for \
instantiation.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
detach_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
detach;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; Function to use to free module \
instance.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
packetmethod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
methods[RLM_COMPONENT_COUNT];&nbsp;&nbsp; //!&lt; Pointers to the various \
section&nbsp; <span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp;&nbsp; \
//</span><span></span>functions, \
ordering<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; determines which function is mapped <span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp;&nbsp; \
</span>//to&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs \
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n \
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
//!&lt; which section <span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; &nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span><span>&nbsp;&nbsp; \
&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb \
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& \
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<b>uint64_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
rtcode[RLM_MODULE_NUMCODES];&nbsp;&nbsp;&nbsp; //Used for module return \
codes</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<br>} module_t;<br><br>Now in function: modcall_recurse() I \
added<br><br>modcall_recurse() {<br><br>rlm_rcode_t result;<br><b>module_t const \
*module;</b><br><br>result = call_modsingle(c-&gt;method, sp, \
request);<br><b>module-&gt;rtcode[result] = module-&gt;rtcode[result] + \
1;</b><br>}&nbsp; <br><br>Also, in radius.c in function main I will use memset to \
initialize my rtcode array to zero.<br>will add this \
statement:<br><br><b>memset(module-&gt;rtcode,0,sizeof(module-&gt;rtcode));<br></b><br>Regards,<br>Sonu<br><br><br>From: \
Alan DeKok &lt;aland@deployingradius.com&gt;<br>Sent: Fri, 26 Sep 2014 23:43:18 \
<br>To: FreeRadius users mailing list \
&lt;freeradius-users@lists.freeradius.org&gt;<br>Subject: Re: Module Statistics in \
freeradius<br>Himanshu Pandey wrote:<br> &gt; But as we discussed, the server does \
NOT keep track of statistics for<br> &gt; each module return codes.<br>
<br>
 &nbsp;Yes... I've said that repeatedly. &nbsp;Perhaps you could repeat it some<br>
more, to be sure that I understand how the server works?<br>
<br>
&gt; The very first thing that I did was finding out the basic module<br>
&gt; structure in freeradius, if I am not wrong this is the basic module<br>
&gt; structure used:<br>
<br>
 &nbsp;Yes.<br>
<br>
&gt; Now I added an unsigned long array in this structure in which module<br>
&gt; return code act as an index. Please see the snippet below:<br>
<br>
 &nbsp;That's not a good idea. &nbsp;For one, the module return codes are already<br>
in a typedef. &nbsp;Just use that one. &nbsp;There's no reason to create a new \
one.<br> <br>
 &nbsp;And "unsigned long" isn't used anywhere else in the server. &nbsp;Just use<br>
"uint64_t".<br>
<br>
&gt; Please advice me that how should I update this my unsigned long<br>
&gt; rtcode[RLM_RETCODE_COUNT] array with each module return code.<br>
<br>
 &nbsp;Use C code to increment the array entry. &nbsp;See modcall.c, \
call_modsingle().<br> <br>
 &nbsp;Alan DeKok.<br>
-<br>
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html<br>
<br><A HREF="http://sigads.rediff.com/RealMedia/ads/click_nx.ads/www.rediffmail.com/signatureline.htm@Middle?" \
target="_blank"><IMG \
SRC="http://sigads.rediff.com/RealMedia/ads/adstream_nx.ads/www.rediffmail.com/signatureline.htm@Middle"></A><table \
cellpadding="0" cellspacing="0"><tbody><tr><td><div style="font-family: Arial, \
Helvetica, sans-serif; font-size:14px">Get your own <span style="padding-bottom: 0px; \
background-color: #cc0000; padding-left: 3px; padding-RIGHT: 3px; font-family: Arial, \
Helvetica, sans-serif; color: #ffffff; font-size: 12px; padding-top: \
0px"><b>FREE</b></span> website,  <span style="padding-bottom: 0px; background-color: \
#c00; padding-left: 3px; padding-RIGHT: 3px; font-family: Arial, Helvetica, \
sans-serif; color: #ffffff; font-size: 12px; padding-top: 0px"><b>FREE</b></span> \
domain &amp; <span style="padding-bottom: 0px; background-color: #c00; padding-left: \
3px; padding-RIGHT: 3px; font-family: Arial, Helvetica, sans-serif; color: #ffffff; \
font-size: 12px; padding-top: 0px"><b>FREE</b></span> mobile app with Company email. \
&nbsp;</div></td><td><a \
href="http://track.rediff.com/click?url=___http://businessemail.rediff.com/email-ids-f \
or-companies-with-less-than-50-employees?sc_cid=sign-1-10-13___&cmp=host&lnk=sign-1-10-13&nsrv1=host" \
style="font-family: Arial, Helvetica, sans-serif; color: #fff; font-size: 14px; \
color:#0000cc" target="_blank"><b>Know More ></b></a><!-- <in-put type="button" \
cl-ass="button" on-click="parent.location=&#39;http://track.rediff.com/click?url=___ht \
tp://businessemail.rediff.com/company-email-hosting-services?sc_cid=signature-23-9-13___&amp;cmp=signature-23-9-13&amp;lnk=mypagelogout&amp;nsrv1=host&#39;" \
value="Know more &gt;"> </input> --></td></tr></tbody></table>



-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic