Hi all,

I am doing some work based on the FreeBSD 4.7 bridge code, and want to add some "userland" table lookup capabilities. Right now I did this for a sysctl call:

(BTW, sorry if the code aesthetics are not the best, I promise to clean that up later):

##############################################################################
#define LOG(x) x
:
: Stuff in between...
:
static int sysctl_bridge_tl(SYSCTL_HANDLER_ARGS) {
if (do_bridge) {
int i,error,index;
char str_line[1024];

for (i=0; i<n_clusters; i++) {
bdg_hash_table *bdg_t = clusters[i].ht;
sprintf (str_line,"IDX# MAC IF USED for CLUSTER: %d\n",clusters[i].cluster_id);
error = SYSCTL_OUT(req, str_line, sizeof(str_line));

LOG(log(LOG_DEBUG,str_line);)
LOG(log(LOG_DEBUG,"Error code = %d\n",error);)

if (error) return (error);

for (index=0; index< HASH_SIZE; index++) {
if (bdg_t[index].name) {
sprintf (str_line,"%6d %6D %s%d %4d\n",index,bdg_t[index].etheraddr,":",
(bdg_t[index].name <= BDG_FORWARD) ? "X": bdg_t[index].name->if_name,
(bdg_t[index].name <= BDG_FORWARD) ? 0 : bdg_t[index].name->if_unit,bdg_t[index].used);

error = SYSCTL_OUT(req, str_line, sizeof(str_line));

LOG(log(LOG_DEBUG,str_line);)
LOG(log(LOG_DEBUG,"Error code = %d\n",error);)

if (error) return (error);
} } } } }

SYSCTL_DECL(_net_link_ether);

SYSCTL_PROC(_net_link_ether, OID_AUTO, bridge_table, CTLTYPE_STRING|CTLFLAG_RD, NULL, 0, &sysctl_bridge_tl, "A", "Bridge table");

##############################################################################

The point is, if I do a "sysctl net.link.ether.bridge_table" on a terminal that is not the console, I don't get any result to this command, but I can see via the log (var/log/messages and the main console) something like this (from the log function):

Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: IDX# MAC IF USED for CLUSTER: 256
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: 292 00:60:ef:20:6e:04 vlan20 0
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: 306 00:60:ef:20:6e:12 vlan40 1
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: 1373 00:60:ef:20:aa:7d vlan10 1
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: 4820 00:50:73:46:61:92 fxp1 1
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: 5471 00:60:ef:20:9a:7f vlan30 1
Jan 24 01:00:04 eacs6 /kernel.BGE_FW2: IDX# MAC IF USED for CLUSTER: 256

(The 256 I guess is because of the htons(), I'll check it later...)

The problem appears to be the function I am using for sending the results to the stdout of the user, but I am not that familiar with sysctl macros and functions... Any suggestions will be appreciated.

Regards,

Federico.


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to