ifcfg-eth0文件参数PREFIX 和 NETMASK的配置不一致问题
ifcfg-eth0文件参数PREFIX 和 NETMASK的配置不一致问题
2013年06月21日 23:57:26
搭建一个简单的网络测试环境,现有服务器ip配置为10.131.4.33 掩码为255.255.254.0网关为 10.131.5.254, 需要访问
-
133 expand_config ()
-
134 {
-
135 if [ -z "${NETMASK}" ]; then
-
136 eval `/bin/ipcalc --netmask ${IPADDR}`
-
137 fi
-
138
-
139 if [ -z "${PREFIX}" ]; then
-
140 eval `/bin/ipcalc --prefix ${IPADDR} ${NETMASK}`
-
141 fi
-
142
-
143 if [ -z "${BROADCAST}" ]; then
-
144 eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}`
-
145 fi
-
146
-
147 if [ -z "${NETWORK}" ]; then
-
148 eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}`
-
149 fi
-
150 }
-
/* vi: set sw=4 ts=4: */
-
/*
-
* Mini ipcalc implementation for busybox
-
*
-
* By Jordan Crouse <jordan@cosmicpenguin.net>
-
* Stephan Linz <linz@li-pro.net>
-
*
-
* This is a complete reimplementation of the ipcalc program
-
* from Red Hat. I didn't look at their source code, but there
-
* is no denying that this is a loving reimplementation
-
*
-
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
-
*/
-
#include "busybox.h"
-
#include <ctype.h>
-
#include <getopt.h>
-
#include <sys/socket.h>
-
#include <arpa/inet.h>
-
#define CLASS_A_NETMASK ntohl(0xFF000000)
-
#define CLASS_B_NETMASK ntohl(0xFFFF0000)
-
#define CLASS_C_NETMASK ntohl(0xFFFFFF00)
-
static unsigned long get_netmask(unsigned long ipaddr)
-
{
-
ipaddr = htonl(ipaddr);
-
if ((ipaddr & 0xC0000000) == 0xC0000000)
-
return CLASS_C_NETMASK;
-
else if ((ipaddr & 0x80000000) == 0x80000000)
-
return CLASS_B_NETMASK;
-
else if ((ipaddr & 0x80000000) == 0)
-
return CLASS_A_NETMASK;
-
else
-
return 0;
-
}
-
#ifdef CONFIG_FEATURE_IPCALC_FANCY
-
static int get_prefix(unsigned long netmask)
-
{
-
unsigned long msk = 0x80000000;
-
int ret = 0;
-
netmask = htonl(netmask);
-
while (msk) {
-
if (netmask & msk)
-
ret++;
-
msk >>= 1;
-
}
-
return ret;
-
}
-
#else
-
int get_prefix(unsigned long netmask);
-
#endif
-
#define NETMASK 0x01
-
#define BROADCAST 0x02
-
#define NETWORK 0x04
-
#define NETPREFIX 0x08
-
#define HOSTNAME 0x10
-
#define SILENT 0x20
-
#if ENABLE_FEATURE_IPCALC_LONG_OPTIONS
-
static const struct option long_options[] = {
-
{ "netmask", no_argument, NULL, 'm' },
-
{ "broadcast", no_argument, NULL, 'b' },
-
{ "network", no_argument, NULL, 'n' },
-
# if ENABLE_FEATURE_IPCALC_FANCY
-
{ "prefix", no_argument, NULL, 'p' },
-
{ "hostname", no_argument, NULL, 'h' },
-
{ "silent", no_argument, NULL, 's' },
-
# endif
-
{ NULL, 0, NULL, 0 }
-
};
-
#endif
-
int ipcalc_main(int argc, char **argv)
-
{
-
unsigned opt;
-
int have_netmask = 0;
-
in_addr_t netmask, broadcast, network, ipaddr;
-
struct in_addr a;
-
char *ipstr;
-
#if ENABLE_FEATURE_IPCALC_LONG_OPTIONS
-
applet_long_options = long_options;
-
#endif
-
opt = getopt32(argc, argv, "mbn" USE_FEATURE_IPCALC_FANCY("phs"));
-
argc -= optind;
-
argv += optind;
-
if (opt & (BROADCAST | NETWORK | NETPREFIX)) {
-
if (argc > 2 || argc <= 0)
-
bb_show_usage();
-
} else {
-
if (argc != 1)
-
bb_show_usage();
-
}
-
if (opt & SILENT)
-
logmode = LOGMODE_NONE; /* Suppress error_msg() output */
-
ipstr = argv[0];
-
if (ENABLE_FEATURE_IPCALC_FANCY) {
-
unsigned long netprefix = 0;
-
char *prefixstr;
-
prefixstr = ipstr;
-
while (*prefixstr) {
-
if (*prefixstr == '/') {
-
*prefixstr = (char)0;
-
prefixstr++;
-
if (*prefixstr) {
-
unsigned msk;
-
netprefix = xatoul_range(prefixstr, 0, 32);
-
netmask = 0;
-
msk = 0x80000000;
-
while (netprefix > 0) {
-
netmask |= msk;
-
msk >>= 1;
-
netprefix--;
-
}
-
netmask = htonl(netmask);
-
/* Even if it was 0, we will signify that we have a netmask. This allows */
-
/* for specification of default routes, etc which have a 0 netmask/prefix */
-
have_netmask = 1;
-
}
-
break;
-
}
-
prefixstr++;
-
}
-
}
-
ipaddr = inet_aton(ipstr, &a);
-
if (ipaddr == 0) {
-
bb_error_msg_and_die("bad IP address: %s", argv[0]);
-
}
-
ipaddr = a.s_addr;
-
if (argc == 2) {
-
if (ENABLE_FEATURE_IPCALC_FANCY && have_netmask) {
-
bb_error_msg_and_die("use prefix or netmask, not both");
-
}
-
netmask = inet_aton(argv[1], &a);
-
if (netmask == 0) {
-
bb_error_msg_and_die("bad netmask: %s", argv[1]);
-
}
-
netmask = a.s_addr;
-
} else {
-
/* JHC - If the netmask wasn't provided then calculate it */
-
if (!ENABLE_FEATURE_IPCALC_FANCY || !have_netmask)
-
netmask = get_netmask(ipaddr);
-
}
-
if (opt & NETMASK) {
-
printf("NETMASK=%sn", inet_ntoa((*(struct in_addr *) &netmask)));
-
}
-
if (opt & BROADCAST) {
-
broadcast = (ipaddr & netmask) | ~netmask;
-
printf("BROADCAST=%sn", inet_ntoa((*(struct in_addr *) &broadcast)));
-
}
-
if (opt & NETWORK) {
-
network = ipaddr & netmask;
-
printf("NETWORK=%sn", inet_ntoa((*(struct in_addr *) &network)));
-
}
-
if (ENABLE_FEATURE_IPCALC_FANCY) {
-
if (opt & NETPREFIX) {
-
printf("PREFIX=%in", get_prefix(netmask));
-
}
-
if (opt & HOSTNAME) {
-
struct hostent *hostinfo;
-
int x;
-
hostinfo = gethostbyaddr((char *) &ipaddr, sizeof(ipaddr), AF_INET);
-
if (!hostinfo) {
-
bb_herror_msg_and_die("cannot find hostname for %s", argv[0]);
-
}
-
for (x = 0; hostinfo->h_name[x]; x++) {
-
hostinfo->h_name[x] = tolower(hostinfo->h_name[x]);
-
}
-
printf("HOSTNAME=%sn", hostinfo->h_name);
-
}
-
}
-
return EXIT_SUCCESS;
-
}
ifcfg-eth0文件参数PREFIX 和 NETMASK的配置不一致问题的更多相关文章
- Linux ifconfig-etho文件参数详解
1.ifcfg-eth0文件参数详解 DEVICE 网卡名称/网络接口的名称BOOTPROTO 系统启动地址协议 常用参数: none:不使用启动地址协议,none禁止DHCP bootp:BOOTP ...
- 一个比较强大的HTTP请求类,支持文本参数和文件参数。
一个 http 请求类 ,支持文件上传,从淘宝 top sdk 里面扣出来的,蛮好用的,做个记录而已. 调用代码: Dictionary<string, string> textParas ...
- Oracle 无备份情况下的恢复--密码文件/参数文件
13.1 恢复密码文件 密码文件(linux 为例)在$ORACLE_HOME/dbs目录下,文件名的前缀是orapw,后接数据库实例名. [oracle@DSI backup]$ cd /u01/a ...
- hadoop 文件参数配置
准备环境(省略) 上传实验所需的压缩包 配置网络信息 修改主机名 配置域名解析 关闭防火墙与SELinux(在所有节点上执行)代码如下: systemctl disable --now firewal ...
- springmvc 项目完整示例06 日志–log4j 参数详细解析 log4j如何配置
Log4j由三个重要的组件构成: 日志信息的优先级 日志信息的输出目的地 日志信息的输出格式 日志信息的优先级从高到低有ERROR.WARN. INFO.DEBUG,分别用来指定这条日志信息的重要程度 ...
- Flask小总结+实例化Flask参数以及对app的配置
Flask 小而精 三方组件全 稳定性相对较差 1.启动: from flask import Flask app = Flask(__name__) app.run("0.0.0.0&qu ...
- Flask的实例化参数及对app的配置
目录 1.调试模式初测 2.app.config中的其他配置参数详解 3.修改config配置的方式(from_object用法) 3.1直接对app.config进行修改: 3.2使用类的方式导入: ...
- Yarn&Mapreduce参数的具体含义和配置参考
Yarn & Mapreduce 参数的具体含义和配置 http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp ...
- [Linux实用工具]Windows下同步Linux文件(Linux安装Samba和配置)
场景需求: 安装了Ubuntu在虚拟机上,但是代码编辑或者其它更多的操作的时候,还是习惯在windows下进行.如果windows下编辑完再上传到服务器,再编译执行,就太繁琐了.一次两次还好说,这编译 ...
随机推荐
- z变换的性质
z变换的许多重要性质在数字信号处理中常常要用到. 序列 z变换 收敛域 1)x(n) X(z) Rx-< |z| <Rx+ 2)y(n) Y(z) Ry-< |z| <Ry+ ...
- C#网络编程(同步传输字符串) - Part.2
服务端客户端通信 在与服务端的连接建立以后,我们就可以通过此连接来发送和接收数据.端口与端口之间以流(Stream)的形式传输数据,因为几乎任何对象都可以保存到流中,所以实际上可以在客户端与服务端之间 ...
- C#中Cache的使用
公共方法Add 将指定项添加到 Cache 对象,该对象具有依赖项.过期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序). Equals(从 Object 继承) 已重载. ...
- Python 函数 min()
min() 函数 作用: min() 方法返回给定参数的最小值,参数可以为序列.x-数值表达式.y-数值表达式.z-数值表达式.返回给定参数的最小值. 语法: min( x, y, z, .... ...
- bzoj 2119 股市的预测 —— 枚举关键点+后缀数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 思路就是对于这个形如 ABA 的串,枚举 A 的长度,并按照长度分出几块,找到一些关键 ...
- UniDac 使用日记(转)
UniDAC使用日记 1. UniQuery默认状态为行提交,使用前根据需要设置readonly或cachedupdates属性 2. UniQuery.Filter默认大 ...
- composer的安装和使用 学习日志
如果你做为一个phper,没有用过composer,那你真的不是一个合格的开发者.那么就来记录一下composer的学习日志 下面分享几个学习源头: composer中文网站:https://www. ...
- 分布式缓存系统 Memcached 数据存储slab与hashtable
缓存数据以item为基本单元,以双链表形式存放在对应级别大小的slabclass结构的chunk中.同时该item还存放在链式hashtable中bucket中,用于提供快速查找的索引. 首先是理解缓 ...
- C#简单操作XML
类文件: class OperatorXML { /// <summary> /// 确定资源文件路径,Resource为自己创建的目录 /// </summary> priv ...
- 关系数据库SQL复习
1.1 SQL的概述 SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言 SQL是一个通用的.功能极强的关系数据库语言 1.2 SQL的特点 1. 综合 ...