summaryrefslogtreecommitdiff
path: root/packages/linux/unslung-kernel/netconsole.patch
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /packages/linux/unslung-kernel/netconsole.patch
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'packages/linux/unslung-kernel/netconsole.patch')
-rw-r--r--packages/linux/unslung-kernel/netconsole.patch394
1 files changed, 0 insertions, 394 deletions
diff --git a/packages/linux/unslung-kernel/netconsole.patch b/packages/linux/unslung-kernel/netconsole.patch
deleted file mode 100644
index 9d297300e1..0000000000
--- a/packages/linux/unslung-kernel/netconsole.patch
+++ /dev/null
@@ -1,394 +0,0 @@
-diff -Naur linux-2.4.22/drivers/net/Config.in.orig linux-2.4.22/drivers/net/Config.in
---- linux-2.4.22/drivers/net/Config.in.orig 2006-02-26 11:49:28.000000000 -0600
-+++ linux-2.4.22/drivers/net/Config.in 2006-02-26 11:40:31.000000000 -0600
-@@ -338,6 +338,8 @@
- dep_tristate ' SysKonnect FDDI PCI support' CONFIG_SKFP $CONFIG_PCI
- fi
-
-+dep_tristate 'Network logging support' CONFIG_NETCONSOLE
-+
- if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- if [ "$CONFIG_INET" = "y" ]; then
- bool 'HIPPI driver support (EXPERIMENTAL)' CONFIG_HIPPI
-diff -Naur linux-2.4.22/drivers/net/Makefile.orig linux-2.4.22/drivers/net/Makefile
---- linux-2.4.22/drivers/net/Makefile.orig 2006-02-26 11:49:45.000000000 -0600
-+++ linux-2.4.22/drivers/net/Makefile 2006-02-26 11:38:58.000000000 -0600
-@@ -272,6 +272,8 @@
- obj-y += ../acorn/net/acorn-net.o
- endif
-
-+obj-$(CONFIG_NETCONSOLE) += netconsole.o
-+
- #
- # HIPPI adapters
- #
-diff -Naur linux-2.4.22/drivers/net/netconsole.c.orig linux-2.4.22/drivers/net/netconsole.c
---- linux-2.4.22/drivers/net/netconsole.c.orig 2006-07-02 23:40:44.597695500 -0500
-+++ linux-2.4.22/drivers/net/netconsole.c 2006-07-10 15:58:44.000000000 -0500
-@@ -0,0 +1,353 @@
-+/* linux/drivers/net/netconsole.c
-+ *
-+ * Copyright (C) 2001 Ingo Molnar <mingo@redhat.com>
-+ *
-+ * This file contains the implementation of an IRQ-safe, crash-safe
-+ * kernel console implementation that outputs kernel messages to the
-+ * network.
-+ *
-+ * Modification history:
-+ *
-+ * 2001-09-17 started by Ingo Molnar.
-+ * 2006-02-26 very minor modifications to suit the NSLU2 w/Unslung -- Mike Westerhof.
-+ * 2006-07-10 usability mods for Unslung (text only, and IP addrs) -- Mike Westerhof.
-+ */
-+
-+/****************************************************************
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2, or (at your option)
-+ * any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ *
-+ ****************************************************************/
-+
-+#include <net/tcp.h>
-+#include <net/udp.h>
-+#include <linux/mm.h>
-+#include <linux/tty.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <asm/unaligned.h>
-+#include <linux/console.h>
-+#include <linux/smp_lock.h>
-+#include <linux/netdevice.h>
-+#include <linux/tty_driver.h>
-+#include <linux/etherdevice.h>
-+
-+static struct net_device *netconsole_dev;
-+static u16 source_port, target_port;
-+static u32 source_ip, target_ip, target_ipaddr;
-+static unsigned char daddr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} ;
-+
-+#define NETCONSOLE_VERSION 0x01
-+/* HEADER_LEN was "5" -- it's zero for Unslung; makes it work better with netcat */
-+#define HEADER_LEN 0
-+
-+#define MAX_UDP_CHUNK 1460
-+#define MAX_PRINT_CHUNK (MAX_UDP_CHUNK-HEADER_LEN)
-+
-+/*
-+ * We maintain a small pool of fully-sized skbs,
-+ * to make sure the message gets out even in
-+ * extreme OOM situations.
-+ */
-+/* Was 32, lowered to 16 for Unslung (to save memory) */
-+#define MAX_NETCONSOLE_SKBS 16
-+
-+
-+static spinlock_t netconsole_lock = SPIN_LOCK_UNLOCKED;
-+static int nr_netconsole_skbs;
-+static struct sk_buff *netconsole_skbs;
-+
-+#define MAX_SKB_SIZE \
-+ (MAX_UDP_CHUNK + sizeof(struct udphdr) + \
-+ sizeof(struct iphdr) + sizeof(struct ethhdr))
-+
-+static void __refill_netconsole_skbs(void)
-+{
-+ struct sk_buff *skb;
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&netconsole_lock, flags);
-+ while (nr_netconsole_skbs < MAX_NETCONSOLE_SKBS) {
-+ skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
-+ if (!skb)
-+ break;
-+ if (netconsole_skbs)
-+ skb->next = netconsole_skbs;
-+ else
-+ skb->next = NULL;
-+ netconsole_skbs = skb;
-+ nr_netconsole_skbs++;
-+ }
-+ spin_unlock_irqrestore(&netconsole_lock, flags);
-+}
-+
-+static struct sk_buff * get_netconsole_skb(void)
-+{
-+ struct sk_buff *skb;
-+
-+ unsigned long flags;
-+
-+ spin_lock_irqsave(&netconsole_lock, flags);
-+ skb = netconsole_skbs;
-+ if (skb)
-+ netconsole_skbs = skb->next;
-+ skb->next = NULL;
-+ nr_netconsole_skbs--;
-+ spin_unlock_irqrestore(&netconsole_lock, flags);
-+
-+ return skb;
-+}
-+
-+static spinlock_t sequence_lock = SPIN_LOCK_UNLOCKED;
-+static unsigned int offset;
-+
-+static void send_netconsole_skb(struct net_device *dev, const char *msg, unsigned int msg_len)
-+{
-+ int total_len, eth_len, ip_len, udp_len;
-+ unsigned long flags;
-+ struct sk_buff *skb;
-+ struct udphdr *udph;
-+ struct iphdr *iph;
-+ struct ethhdr *eth;
-+
-+ udp_len = msg_len + HEADER_LEN + sizeof(*udph);
-+ ip_len = eth_len = udp_len + sizeof(*iph);
-+ total_len = eth_len + ETH_HLEN;
-+
-+ if (nr_netconsole_skbs < MAX_NETCONSOLE_SKBS)
-+ __refill_netconsole_skbs();
-+
-+ skb = alloc_skb(total_len, GFP_ATOMIC);
-+ if (!skb) {
-+ skb = get_netconsole_skb();
-+ if (!skb)
-+ /* tough! */
-+ return;
-+ }
-+
-+ atomic_set(&skb->users, 1);
-+ skb_reserve(skb, total_len - msg_len - HEADER_LEN);
-+/* Header data removed for Unslung -- its presence makes netcat less useful
-+ * skb->data[0] = NETCONSOLE_VERSION;
-+ *
-+ * spin_lock_irqsave(&sequence_lock, flags);
-+ * put_unaligned(htonl(offset), (u32 *) (skb->data + 1));
-+ * offset += msg_len;
-+ * spin_unlock_irqrestore(&sequence_lock, flags);
-+ */
-+ memcpy(skb->data + HEADER_LEN, msg, msg_len);
-+ skb->len += msg_len + HEADER_LEN;
-+
-+ udph = (struct udphdr *) skb_push(skb, sizeof(*udph));
-+ udph->source = source_port;
-+ udph->dest = target_port;
-+ udph->len = htons(udp_len);
-+ udph->check = 0;
-+
-+ iph = (struct iphdr *)skb_push(skb, sizeof(*iph));
-+
-+ iph->version = 4;
-+ iph->ihl = 5;
-+ iph->tos = 0;
-+ iph->tot_len = htons(ip_len);
-+ iph->id = 0;
-+ iph->frag_off = 0;
-+ iph->ttl = 64;
-+ iph->protocol = IPPROTO_UDP;
-+ iph->check = 0;
-+ iph->saddr = source_ip;
-+ iph->daddr = target_ip;
-+ iph->check = ip_fast_csum((unsigned char *)iph, iph->ihl);
-+
-+ eth = (struct ethhdr *) skb_push(skb, ETH_HLEN);
-+
-+ eth->h_proto = htons(ETH_P_IP);
-+ memcpy(eth->h_source, dev->dev_addr, dev->addr_len);
-+ memcpy(eth->h_dest, daddr, dev->addr_len);
-+
-+repeat:
-+ spin_lock(&dev->xmit_lock);
-+ dev->xmit_lock_owner = smp_processor_id();
-+
-+ if (netif_queue_stopped(dev)) {
-+ dev->xmit_lock_owner = -1;
-+ spin_unlock(&dev->xmit_lock);
-+
-+ dev->poll_controller(dev);
-+ goto repeat;
-+ }
-+
-+ dev->hard_start_xmit(skb, dev);
-+
-+ dev->xmit_lock_owner = -1;
-+ spin_unlock(&dev->xmit_lock);
-+}
-+
-+static void write_netconsole_msg(struct console *con, const char *msg, unsigned int msg_len)
-+{
-+ int len, left;
-+ struct net_device *dev;
-+
-+ dev = netconsole_dev;
-+ if (!dev)
-+ return;
-+
-+ if (dev->poll_controller && netif_running(dev)) {
-+ unsigned long flags;
-+
-+ __save_flags(flags);
-+ __cli();
-+ left = msg_len;
-+repeat:
-+ if (left > MAX_PRINT_CHUNK)
-+ len = MAX_PRINT_CHUNK;
-+ else
-+ len = left;
-+ send_netconsole_skb(dev, msg, len);
-+ msg += len;
-+ left -= len;
-+ if (left)
-+ goto repeat;
-+ __restore_flags(flags);
-+ }
-+}
-+
-+static char *dev;
-+static int target_eth_byte0 = 255;
-+static int target_eth_byte1 = 255;
-+static int target_eth_byte2 = 255;
-+static int target_eth_byte3 = 255;
-+static int target_eth_byte4 = 255;
-+static int target_eth_byte5 = 255;
-+
-+MODULE_AUTHOR("Ingo Molnar <mingo@redhat.com>");
-+MODULE_DESCRIPTION("kernel network console implementation");
-+MODULE_LICENSE("GPL");
-+MODULE_PARM(target_ip, "i");
-+MODULE_PARM(target_ipaddr, "s");
-+MODULE_PARM(target_eth_byte0, "i");
-+MODULE_PARM(target_eth_byte1, "i");
-+MODULE_PARM(target_eth_byte2, "i");
-+MODULE_PARM(target_eth_byte3, "i");
-+MODULE_PARM(target_eth_byte4, "i");
-+MODULE_PARM(target_eth_byte5, "i");
-+MODULE_PARM(source_port, "h");
-+MODULE_PARM(target_port, "h");
-+MODULE_PARM(dev, "s");
-+
-+static struct console netconsole =
-+ { flags: CON_ENABLED, write: write_netconsole_msg };
-+
-+static int init_netconsole(void)
-+{
-+ struct net_device *ndev = NULL;
-+ struct in_device *in_dev;
-+
-+ // Set some reasonable defaults, at least for the NSLU2 device
-+ if (!target_port)
-+ target_port = 6666;
-+ if (!source_port)
-+ source_port = 6665;
-+ if (!dev)
-+ dev = "ixp0";
-+
-+ printk(KERN_INFO "netconsole: using network device <%s>\n", dev);
-+ // this will be valid once the device goes up.
-+ if (dev)
-+ ndev = dev_get_by_name(dev);
-+ if (!ndev) {
-+ printk(KERN_ERR "netconsole: network device %s does not exist, aborting.\n", dev);
-+ return -1;
-+ }
-+ if (!ndev->poll_controller) {
-+ printk(KERN_ERR "netconsole: %s's network driver does not implement netlogging yet, aborting.\n", dev);
-+ return -1;
-+ }
-+ in_dev = in_dev_get(ndev);
-+ if (!in_dev) {
-+ printk(KERN_ERR "netconsole: network device %s is not an IP protocol device, aborting.\n", dev);
-+ return -1;
-+ }
-+ source_ip = ntohl(in_dev->ifa_list->ifa_local);
-+ if (!source_ip) {
-+ printk(KERN_ERR "netconsole: network device %s has no local address, aborting.\n", dev);
-+ return -1;
-+ }
-+ source_ip = htonl(source_ip);
-+#define IP(x) ((char *)&source_ip)[x]
-+ printk(KERN_INFO "netconsole: using source IP %i.%i.%i.%i\n",
-+ IP(0), IP(1), IP(2), IP(3));
-+#undef IP
-+ if (!target_ipaddr) {
-+ if (!target_ip) {
-+ printk(KERN_ERR "netconsole: neither target_ipaddr nor target_ip parameter not specified, aborting.\n");
-+ return -1;
-+ } else {
-+ target_ip = htonl(target_ip);
-+ }
-+ } else {
-+ target_ip = in_aton(target_ipaddr);
-+ }
-+#define IP(x) ((char *)&target_ip)[x]
-+ printk(KERN_INFO "netconsole: using target IP %i.%i.%i.%i\n",
-+ IP(0), IP(1), IP(2), IP(3));
-+#undef IP
-+ if (!source_port) {
-+ printk(KERN_ERR "netconsole: source_port parameter not specified, aborting.\n");
-+ return -1;
-+ }
-+ printk(KERN_INFO "netconsole: using source UDP port: %i\n", source_port);
-+ source_port = htons(source_port);
-+ if (!target_port) {
-+ printk(KERN_ERR "netconsole: target_port parameter not specified, aborting.\n");
-+ return -1;
-+ }
-+ printk(KERN_INFO "netconsole: using target UDP port: %i\n", target_port);
-+ target_port = htons(target_port);
-+
-+ daddr[0] = target_eth_byte0;
-+ daddr[1] = target_eth_byte1;
-+ daddr[2] = target_eth_byte2;
-+ daddr[3] = target_eth_byte3;
-+ daddr[4] = target_eth_byte4;
-+ daddr[5] = target_eth_byte5;
-+
-+ if ((daddr[0] & daddr[1] & daddr[2] & daddr[3] & daddr[4] & daddr[5]) == 255)
-+ printk(KERN_INFO "netconsole: using broadcast ethernet frames to send packets.\n");
-+ else
-+ printk(KERN_INFO "netconsole: using target ethernet address %02x:%02x:%02x:%02x:%02x:%02x.\n", daddr[0], daddr[1], daddr[2], daddr[3], daddr[4], daddr[5]);
-+
-+ netconsole_dev = ndev;
-+#define STARTUP_MSG "[...network console startup...]\n"
-+ write_netconsole_msg(NULL, STARTUP_MSG, strlen(STARTUP_MSG));
-+
-+ register_console(&netconsole);
-+ printk(KERN_INFO "netconsole: network logging started up successfully!\n");
-+ return 0;
-+}
-+
-+static void cleanup_netconsole(void)
-+{
-+ printk(KERN_INFO "netconsole: network logging shut down.\n");
-+ unregister_console(&netconsole);
-+
-+#define SHUTDOWN_MSG "[...network console shutdown...]\n"
-+ write_netconsole_msg(NULL, SHUTDOWN_MSG, strlen(SHUTDOWN_MSG));
-+ netconsole_dev = NULL;
-+}
-+
-+module_init(init_netconsole);
-+module_exit(cleanup_netconsole);
-+
-+int dummy = MAX_SKB_SIZE;
-diff -Naur linux-2.4.22/include/linux/netdevice.h.orig linux-2.4.22/include/linux/netdevice.h
---- linux-2.4.22/include/linux/netdevice.h.orig 2006-02-26 11:50:24.000000000 -0600
-+++ linux-2.4.22/include/linux/netdevice.h 2006-02-26 11:37:14.000000000 -0600
-@@ -428,6 +428,9 @@
- int (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
- int (*accept_fastpath)(struct net_device *, struct dst_entry*);
-
-+#define HAVE_POLL_CONTROLLER
-+ void (*poll_controller)(struct net_device *dev);
-+
- /* open/release and usage marking */
- struct module *owner;
-