diff --git a/debug/sysctl b/debug/sysctl new file mode 100755 index 0000000..38875d3 --- /dev/null +++ b/debug/sysctl Binary files differ diff --git a/debug/sysctl.c b/debug/sysctl.c new file mode 100644 index 0000000..7382756 --- /dev/null +++ b/debug/sysctl.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include + +int mib[CTL_MAXNAME]; +//int mib[2]; +size_t len; +char *p; + +static int name2oid(const char *name, int *oidp); + +int main() { + printf("SYSCTL\n"); + + + mib[0] = 1; + mib[1] = 1; + + sysctl(mib, 2, NULL, &len, NULL, 0); + p = malloc(len); + sysctl(mib, 2, p, &len, NULL, 0); + + printf("[%s]\n", p); + + mib[0] = 1; + mib[1] = 10; + + sysctl(mib, 2, NULL, &len, NULL, 0); + p = malloc(len); + sysctl(mib, 2, p, &len, NULL, 0); + + printf("[%s]\n", p); + + mib[0] = 1; + mib[1] = 2; + + sysctl(mib, 2, NULL, &len, NULL, 0); + p = malloc(len); + sysctl(mib, 2, p, &len, NULL, 0); + + printf("[%s]\n", p); + + mib[0] = 1; + mib[1] = 4; + + sysctl(mib, 2, NULL, &len, NULL, 0); + p = malloc(len); + sysctl(mib, 2, p, &len, NULL, 0); + + printf("[%s]\n", p); + + mib[0] = 6; + mib[1] = 1; + + sysctl(mib, 2, NULL, &len, NULL, 0); + p = malloc(len); + sysctl(mib, 2, p, &len, NULL, 0); + + printf("[%s]\n", p); + + size_t j; + + //j = name2oid("vm.overcommit", mib); + j = name2oid("hw.pagesizes", mib); + + printf("j:[%i]\n", j); + + for (int i = 0; i < j; i++) + printf("[%i]", mib[i]); + printf("\n"); +} + +static int name2oid(const char *name, int *oidp) +{ + int oid[2]; + int i; + size_t j; + + oid[0] = 0; + oid[1] = 3; + + j = CTL_MAXNAME * sizeof(int); + i = sysctl(oid, 2, oidp, &j, name, strlen(name)); + if (i < 0) + return (i); + j /= sizeof(int); + return (j); +} + diff --git a/sys/Makefile b/sys/Makefile index 40360e5..549a24b 100644 --- a/sys/Makefile +++ b/sys/Makefile @@ -12,7 +12,7 @@ @echo "***************************************************************" @echo "Step 1: Clean Kernel" @echo "***************************************************************" - ${MAKE} clean + #${MAKE} clean @echo @echo "***************************************************************" @echo "Step 2: Build Kernel Objects" diff --git a/sys/kernel/kern_sysctl.c b/sys/kernel/kern_sysctl.c index eff59a0..de13257 100644 --- a/sys/kernel/kern_sysctl.c +++ b/sys/kernel/kern_sysctl.c @@ -139,7 +139,7 @@ ctls->id = CTL_UNSPEC; ctls->children = 0x0; sprintf(ctls->name, "unspec"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->prev = ctls; @@ -147,7 +147,7 @@ tmpCtl->children = 0x0; sprintf(tmpCtl->name, "kern"); ctls->next = tmpCtl; - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -155,7 +155,7 @@ tmpCtl->id = CTL_VM; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "vm"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -163,7 +163,7 @@ tmpCtl->id = CTL_VFS; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "vfs"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -171,7 +171,7 @@ tmpCtl->id = CTL_NET; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "net"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -179,7 +179,7 @@ tmpCtl->id = CTL_DEBUG; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "debug"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -187,7 +187,7 @@ tmpCtl->id = CTL_HW; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "hw"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -195,7 +195,7 @@ tmpCtl->id = CTL_MACHDEP; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "machdep"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -203,7 +203,7 @@ tmpCtl->id = CTL_USER; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "user"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -211,7 +211,7 @@ tmpCtl->id = CTL_P1003_1B; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "p1003_1b"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); tmpCtl->next = (struct sysctl_entry *) kmalloc(sizeof(struct sysctl_entry)); tmpCtl->next->prev = tmpCtl; @@ -219,7 +219,7 @@ tmpCtl->id = CTL_UBIX; tmpCtl->children = 0x0; sprintf(tmpCtl->name, "ubix"); - insert_trieNode(sysctl_headTrie, &ctls->name, ctls); + insert_trieNode(&sysctl_headTrie, &ctls->name, ctls); def_ctls(); @@ -271,8 +271,15 @@ if (args->namelen == 2 && args->name[0] == 0 && args->name[1] == 3) { #ifdef DEBUG_SYSCTL - kprintf("%s:%i>name_to_mib: %s", __FILE__,__LINE__,args->newp); + kprintf("%s:%i>name_to_mib: %s\n", __FILE__,__LINE__,args->newp); #endif + + kprintf("Let's Find The Trie\n"); + tmpCtl = (struct sysctl_entry *) search_trieNode(sysctl_headTrie, args->newp)->e; + kprintf("Done Searching: 0x%X\n", tmpCtl); + + if (tmpCtl != 0x0) + kprintf("\n", tmpCtl->name); // tmpCtl = sysctl_findMib(args->newp, args->namelen); td->td_retval[0] = ENOENT; return(-1); @@ -379,7 +386,7 @@ tmpCtl->children->next = 0x0; tmpCtl->children->id = name[namelen - 1]; sprintf(tmpCtl->children->name, str_name); - insert_trieNode(sysctl_headTrie, &tmpCtl->children->name); + insert_trieNode(&sysctl_headTrie, &tmpCtl->children->name, tmpCtl->children); tmpCtl->children->value = (void *) kmalloc(buf_size); memcpy(tmpCtl->children->value, buf, buf_size); tmpCtl->children->val_len = buf_size; @@ -391,7 +398,7 @@ newCtl->children = 0x0; newCtl->id = name[namelen - 1]; sprintf(newCtl->name, str_name); - insert_trieNode(sysctl_headTrie, &newCtl->name); + insert_trieNode(&sysctl_headTrie, &newCtl->name, newCtl); newCtl->value = (void *) kmalloc(buf_size); memcpy(newCtl->value, buf, buf_size); newCtl->val_len = buf_size; diff --git a/sys/lib/kern_trie.c b/sys/lib/kern_trie.c index 06d4647..d07ec03 100644 --- a/sys/lib/kern_trie.c +++ b/sys/lib/kern_trie.c @@ -70,7 +70,7 @@ struct Trie *search_trieNode(struct Trie *head, char *str) { // return 0 if Trie is empty - if (head == NULL) + if (head == NULL || str == NULL) return (0); struct Trie *curr = head;