home *** CD-ROM | disk | FTP | other *** search
- --- linux-2.0.00/include/linux/kerneld.h Tue Jun 11 00:20:38 1996
- +++ linux/include/linux/kerneld.h Tue Jun 11 00:21:07 1996
- @@ -8,6 +8,8 @@
- #define KERNELD_CANCEL_RELEASE_MODULE 5 /* "rmmod" */
- #define KERNELD_REQUEST_ROUTE 6 /* from net/ipv4/route.c */
- #define KERNELD_BLANKER 7 /* from drivers/char/console.c */
- +#define KERNELD_GET_PERSIST 8 /* persistent module storage */
- +#define KERNELD_SET_PERSIST 9 /* persistent module storage */
- #define KERNELD_ARP 256 /* from net/ipv4/arp.c */
-
- /*
- @@ -46,7 +48,16 @@
- #endif /* __KERNEL__ */
- };
-
- +struct __persist {
- + int keylen;
- + int arglen;
- + char arr[0];
- +};
- +
- #ifdef __KERNEL__
- +#include <sys/types.h>
- +#include <linux/malloc.h>
- +
- extern int kerneld_send(int msgtype, int ret_size, int msgsz,
- const char *text, const char *ret_val);
-
- @@ -127,5 +138,47 @@
- strlen(on_off?"on":"off"), on_off?"on":"off", NULL);
- }
-
- +/*
- + * Persistent storage for modules
- + *
- + * Usage:
- + * int get_persist("a key", &value, sizeof(value));
- + * Returns > 0 on success (return value == returned size)
- + *
- + * int set_persist("a key", &value, sizeof(value));
- + * Returns < 0 on failure
- + *
- + * To remove an entry, use: "set_persist("a key", NULL, 0);"
- + */
- +
- +static inline int set_persist(char *key, void *value, size_t length)
- +{
- + struct __persist *p;
- + int keylen = strlen(key) + 1;
- + int structsize = keylen + length + sizeof(struct __persist);
- + int status;
- +
- + if ((p = (struct __persist *)kmalloc(structsize, GFP_ATOMIC)) == NULL)
- + return -ENOMEM;
- + strcpy(p->arr, key);
- + p->keylen = keylen;
- + p->arglen = length;
- + if (length)
- + memcpy(p->arr + keylen, value, length);
- +
- + status = kerneld_send(KERNELD_SET_PERSIST,
- + 0 | KERNELD_NOWAIT,
- + structsize, (char *)p, NULL);
- +
- + kfree(p);
- + return status;
- +}
- +
- +static inline int get_persist(char *key, void *value, size_t length)
- +{
- + return kerneld_send(KERNELD_GET_PERSIST,
- + length | KERNELD_WAIT,
- + strlen(key), key, value);
- +}
- #endif /* __KERNEL__ */
- #endif
-