#include "gmnal.h"
+
+
gmnal_data_t *global_nal_data = NULL;
+#define GLOBAL_NID_STR_LEN 16
+char global_nid_str[GLOBAL_NID_STR_LEN] = {0};
+
+/*
+ * Write the global nid /proc/sys/gmnal/globalnid
+ */
+#define GMNAL_SYSCTL 201
+#define GMNAL_SYSCTL_GLOBALNID 1
+
+static ctl_table gmnal_sysctl_table[] = {
+ {GMNAL_SYSCTL_GLOBALNID, "globalnid",
+ global_nid_str, GLOBAL_NID_STR_LEN,
+ 0444, NULL, &proc_dostring},
+ { 0 }
+};
+
+
+static ctl_table gmnalnal_top_sysctl_table[] = {
+ {GMNAL_SYSCTL, "gmnal", NULL, 0, 0555, gmnal_sysctl_table},
+ { 0 }
+};
+
+
+
+
+
+
/*
* gmnal_api_forward
* This function takes a pack block of arguments from the NAL API
* Give up the processor
*/
void
-gmnal_api_yield(nal_t *nal)
+gmnal_api_yield(nal_t *nal, unsigned long *flags, int milliseconds)
{
CDEBUG(D_TRACE, "gmnal_api_yield : nal [%p]\n", nal);
- set_current_state(TASK_INTERRUPTIBLE);
- schedule();
+ if (milliseconds != 0) {
+ CERROR("Blocking yield not implemented yet\n");
+ LBUG();
+ }
+ our_cond_resched();
return;
}
ptl_pid_t portals_pid = 0;
- CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d],
- ac_size[%d]\n", interface, ptl_size, ac_size);
+ CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d], "
+ "ac_size[%d]\n", interface, ptl_size, ac_size);
PORTAL_ALLOC(nal_data, sizeof(gmnal_data_t));
}
- CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d],
- name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
+ CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d], "
+ "name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
"gmnal", GM_API_VERSION);
GMNAL_GM_LOCK(nal_data);
CDEBUG(D_ERROR, "gm_open Failure. No such device\n");
break;
case(GM_INCOMPATIBLE_LIB_AND_DRIVER):
- CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib
- and driver\n");
+ CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib "
+ "and driver\n");
break;
case(GM_OUT_OF_MEMORY):
CDEBUG(D_ERROR, "gm_open Failure. Out of Memory\n");
break;
default:
- CDEBUG(D_ERROR, "gm_open Failure. Unknow error
- code [%d]\n", gm_status);
+ CDEBUG(D_ERROR, "gm_open Failure. Unknow error "
+ "code [%d]\n", gm_status);
break;
}
GMNAL_GM_LOCK(nal_data);
}
CDEBUG(D_INFO, "Global node id is [%u]\n", global_nid);
nal_data->gm_global_nid = global_nid;
+ snprintf(global_nid_str, GLOBAL_NID_STR_LEN, "%u", global_nid);
/*
pid = gm_getpid();
return(NULL);
}
+ nal_data->sysctl = NULL;
+ nal_data->sysctl = register_sysctl_table (gmnalnal_top_sysctl_table, 0);
+
CDEBUG(D_INFO, "gmnal_init finished\n");
global_nal_data = nal->nal_data;
gm_close(nal_data->gm_port);
gm_finalize();
GMNAL_GM_UNLOCK(nal_data);
+ if (nal_data->sysctl)
+ unregister_sysctl_table (nal_data->sysctl);
PORTAL_FREE(nal, sizeof(nal_t));
PORTAL_FREE(nal_data, sizeof(gmnal_data_t));
PORTAL_FREE(nal_cb, sizeof(nal_cb_t));