Re: [RFC][PATCH -mm 3/5] add interface for netconsole using sysfs
From: Randy Dunlap <hidden>
Date: 2006-12-24 05:33:33
Also in:
lkml
On Fri, 22 Dec 2006 21:14:36 +0900 Keiichi KII wrote:
quoted hunk ↗ jump to hunk
From: Keiichi KII <redacted> --- [changes] 1. expand macro code as far as possible. 2. follow kernel coding style. 3. print proper output messeage. 4. attach proper label for printk. 5. integrate netpoll_lock and netcon_target_list_lock into common spinlock. 6. return proper error value.--- linux-mm/drivers/net/netconsole.c 2006-12-22 20:54:54.431673500 +0900 +++ enhanced-netconsole/drivers/net/netconsole.c.sysfs 2006-12-22 16:12:47.925833000 +0900@@ -56,18 +58,234 @@ MODULE_PARM_DESC(netconsole, " netconsol struct netconsole_target { struct list_head list; + struct kobject obj; int id; struct netpoll np; }; +#define MAX_PRINT_CHUNK 1000 +#define CONFIG_SEPARATOR ":" +#define MAC_ADDR_DIGIT 6
Can you use ETH_ALEN from if_ether.h instead of MAC_ADDR_DIGIT ?
+
+struct target_attr {
+ struct attribute attr;
+ ssize_t (*show)(struct netconsole_target*, char*);
+ ssize_t (*store)(struct netconsole_target*, const char*,
+ size_t count);
+};
+
static int add_target(char* target_config);
+static void setup_target_sysfs(struct netconsole_target *nt);
static void cleanup_netconsole(void);
static void delete_target(struct netconsole_target *nt);
+static int miscdev_configured = 0;Don't init static data to 0 or NULL. It's done for us.
static LIST_HEAD(target_list);
static DEFINE_SPINLOCK(target_list_lock);
+static ssize_t show_local_ip(struct netconsole_target *nt, char *buf)
+{
+ return sprintf(buf, "%d.%d.%d.%d\n", HIPQUAD(nt->np.local_ip));I don't understand the use of HIPQUAD() here instead of NIPQUAD(). Explain? Also, NIPQUAD_FMT (in kernel.h) uses "%u.%u.%u.%u". This should probably be the same. Or just use: NIPQUAD_FMT "\n"
+}
+
+static ssize_t show_remote_ip(struct netconsole_target *nt, char *buf)
+{
+ return sprintf(buf, "%d.%d.%d.%d\n", HIPQUAD(nt->np.remote_ip));
+}
+
+
+static ssize_t store_remote_mac(struct netconsole_target *nt, const char *buf,
+ size_t count)
+{
+ unsigned char input_mac[MAC_ADDR_DIGIT] =
+ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ const char *cur = buf;
+ char *delim;
+ int i = 0;
+
+ for(i=0; i < MAC_ADDR_DIGIT; i++) {
for (i = 0; i < MAC_ADDR_DIGIT; i++) {
+ input_mac[i] = simple_strtol(cur, NULL, 16);
+ if (i != MAC_ADDR_DIGIT - 1 &&
+ (delim = strchr(cur, ':')) == NULL) {
+ return -EINVAL;No braces on one-line "blocks", please.
+ } + cur = delim + 1; + } + spin_lock(&target_list_lock); + memcpy(nt->np.remote_mac, input_mac, MAC_ADDR_DIGIT); + spin_unlock(&target_list_lock); + + return count; +} + +
--- ~Randy