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

📄 initsubnet.c

📁 This a good VPN source
💻 C
字号:
/* * initialize subnet structure * Copyright (C) 2000, 2002  Henry Spencer. *  * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at your * option) any later version.  See <http://www.fsf.org/copyleft/lgpl.txt>. *  * This library 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 Library General Public * License for more details. * * RCSID $Id: initsubnet.c,v 1.9 2004/04/09 18:00:39 mcr Exp $ */#include "internal.h"#include "openswan.h"/* - initsubnet - initialize ip_subnet from address and count * * The only hard part is checking for host-part bits turned on. */err_t				/* NULL for success, else string literal */initsubnet(addr, count, clash, dst)const ip_address *addr;int count;int clash;			/* '0' zero host-part bits, 'x' die on them */ip_subnet *dst;{	unsigned char *p;	int n;	int c;	unsigned m;	int die;	dst->addr = *addr;	n = addrbytesptr(&dst->addr, (const unsigned char **)&p);	if (n == 0)		return "unknown address family";	switch (clash) {	case '0':		die = 0;		break;	case 'x':		die = 1;		break;	default:		return "unknown clash-control value in initsubnet";		break;	}	c = count / 8;	if (c > n)		return "impossible mask count";	p += c;	n -= c;	m = 0xff;	c = count % 8;	if (n > 0 && c != 0)	/* partial byte */		m >>= c;	for (; n > 0; n--) {		if ((*p & m) != 0) {			if (die)				return "improper subnet, host-part bits on";			*p &= ~m;		}		m = 0xff;		p++;	}	dst->maskbits = count;	return NULL;}/* - addrtosubnet - initialize ip_subnet from a single address */err_t				/* NULL for success, else string literal */addrtosubnet(addr, dst)const ip_address *addr;ip_subnet *dst;{	int n;	dst->addr = *addr;	n = addrbytesptr(&dst->addr, (const unsigned char **)NULL);	if (n == 0)		return "unknown address family";	dst->maskbits = n*8;	return NULL;}

⌨️ 快捷键说明

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