⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utils.c

📁 LINUX1.0内核源代码,学习LINUX编程的一定要看。
💻 C
字号:
/* * INET		An implementation of the TCP/IP protocol suite for the LINUX *		operating system.  INET is implemented using the  BSD Socket *		interface as the means of communication with the user level. * *		Various kernel-resident INET utility functions; mainly *		for format conversion and debugging output. * * Version:	@(#)utils.c	1.0.7	05/18/93 * * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> * * Fixes: *		Alan Cox	:	verify_area check. * * *		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 of the License, or (at your option) any later version. */#include <asm/segment.h>#include <asm/system.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/socket.h>#include <linux/in.h>#include <linux/errno.h>#include <linux/stat.h>#include <stdarg.h>#include "inet.h"#include "dev.h"#include "eth.h"#include "ip.h"#include "protocol.h"#include "tcp.h"#include "skbuff.h"#include "arp.h"/* Display an IP address in readable format. */char *in_ntoa(unsigned long in){  static char buff[18];  register char *p;  p = (char *) &in;  sprintf(buff, "%d.%d.%d.%d",	(p[0] & 255), (p[1] & 255), (p[2] & 255), (p[3] & 255));  return(buff);}/* Convert an ASCII string to binary IP. */unsigned longin_aton(char *str){  unsigned long l;  unsigned int val;  int i;  l = 0;  for (i = 0; i < 4; i++) {	l <<= 8;	if (*str != '\0') {		val = 0;		while (*str != '\0' && *str != '.') {			val *= 10;			val += *str - '0';			str++;		}		l |= val;		if (*str != '\0') str++;	}  }  return(htonl(l));}voiddprintf(int level, char *fmt, ...){  va_list args;  char *buff;  extern int vsprintf(char * buf, const char * fmt, va_list args);  if (level != inet_debug) return;  buff = (char *) kmalloc(256, GFP_ATOMIC);  if (buff != NULL) {	va_start(args, fmt);	vsprintf(buff, fmt, args);	va_end(args);	printk(buff);	kfree(buff);  }}intdbg_ioctl(void *arg, int level){  int val;  int err;    if (!suser()) return(-EPERM);  err=verify_area(VERIFY_READ, (void *)arg, sizeof(int));  if(err)  	return err;  val = get_fs_long((int *)arg);  switch(val) {	case 0:	/* OFF */		inet_debug = DBG_OFF;		break;	case 1:	/* ON, INET */		inet_debug = level;		break;	case DBG_RT:		/* modules */	case DBG_DEV:	case DBG_ETH:	case DBG_PROTO:	case DBG_TMR:	case DBG_PKT:	case DBG_RAW:	case DBG_LOOPB:		/* drivers */	case DBG_SLIP:	case DBG_ARP:		/* protocols */	case DBG_IP:	case DBG_ICMP:	case DBG_TCP:	case DBG_UDP:		inet_debug = val;		break;	default:		return(-EINVAL);  }  return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -