亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? state.c

?? ipsec vpn
?? C
?? 第 1 頁 / 共 2 頁
字號:
    }    nst->st_remoteaddr = st->st_remoteaddr;    nst->st_remoteport = st->st_remoteport;    nst->st_localaddr  = st->st_localaddr;    nst->st_localport  = st->st_localport;    nst->st_interface  = st->st_interface;    nst->st_clonedfrom = st->st_serialno;#   define clone_chunk(ch, name) \	clonetochunk(nst->ch, st->ch.ptr, st->ch.len, name)    clone_chunk(st_skeyid_d, "st_skeyid_d in duplicate_state");    clone_chunk(st_skeyid_a, "st_skeyid_a in duplicate_state");    clone_chunk(st_skeyid_e, "st_skeyid_e in duplicate_state");    clone_chunk(st_enc_key, "st_enc_key in duplicate_state");#   undef clone_chunk    nst->st_oakley = st->st_oakley;    return nst;}#if 1void for_each_state(void *(f)(struct state *, void *data), void *data){	struct state *st, *ocs = cur_state;	int i;	for (i=0; i<STATE_TABLE_SIZE; i++) {		for (st = statetable[i]; st != NULL; st = st->st_hashchain_next) {			set_cur_state(st);			f(st, data);		}	}	cur_state = ocs;}#endif/* * Find a state object. */struct state *find_state(const u_char *icookie, const u_char *rcookie, const ip_address *peer, msgid_t /*network order*/ msgid){    struct state *st = *state_hash(icookie, rcookie, peer);    while (st != (struct state *) NULL)    {	if (sameaddr(peer, &st->st_connection->spd.that.host_addr)	    && memcmp(icookie, st->st_icookie, COOKIE_SIZE) == 0	    && memcmp(rcookie, st->st_rcookie, COOKIE_SIZE) == 0)	{	    DBG(DBG_CONTROL,		DBG_log("peer and cookies match on #%ld, provided msgid %08x vs %08x"			, st->st_serialno			, ntohl(msgid), ntohl(st->st_msgid)));	    if(msgid == st->st_msgid)		break;	}	st = st->st_hashchain_next;    }    DBG(DBG_CONTROL,	if (st == NULL)	    DBG_log("state object not found");	else	    DBG_log("state object #%lu found, in %s"		, st->st_serialno		, enum_show(&state_names, st->st_state)));    return st;}/* * Find a state object. */struct state *find_info_state(const u_char *icookie		, const u_char *rcookie		, const ip_address *peer		, msgid_t /*network order*/ msgid){    struct state *st = *state_hash(icookie, rcookie, peer);    while (st != (struct state *) NULL)    {	if (sameaddr(peer, &st->st_connection->spd.that.host_addr)	    && memcmp(icookie, st->st_icookie, COOKIE_SIZE) == 0	    && memcmp(rcookie, st->st_rcookie, COOKIE_SIZE) == 0)	{	    DBG(DBG_CONTROL,		DBG_log("peer and cookies match on #%ld, provided msgid %08x vs %08x/%08x"			, st->st_serialno			, ntohl(msgid)			, ntohl(st->st_msgid)			, ntohl(st->st_msgid_phase15)));	    if((st->st_msgid_phase15!=0 && msgid == st->st_msgid_phase15)	       || msgid == st->st_msgid)		break;	}	st = st->st_hashchain_next;    }    DBG(DBG_CONTROL,	if (st == NULL)	    DBG_log("p15 state object not found");	else	    DBG_log("p15 state object #%lu found, in %s"		, st->st_serialno		, enum_show(&state_names, st->st_state)));    return st;}/* Find the state that sent a packet * ??? this could be expensive -- it should be rate-limited to avoid DoS */struct state *find_sender(size_t packet_len, u_char *packet){    int i;    struct state *st;    if (packet_len >= sizeof(struct isakmp_hdr))	for (i = 0; i < STATE_TABLE_SIZE; i++)	    for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)		if (st->st_tpacket.ptr != NULL		&& st->st_tpacket.len == packet_len		&& memcmp(st->st_tpacket.ptr, packet, packet_len) == 0)		    return st;    return NULL;}struct state *find_phase2_state_to_delete(const struct state *p1st, u_int8_t protoid, ipsec_spi_t spi, bool *bogus){    struct state *st;    int i;    *bogus = FALSE;    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)	{	    if (IS_IPSEC_SA_ESTABLISHED(st->st_state)	    && p1st->st_connection->host_pair == st->st_connection->host_pair	    && same_peer_ids(p1st->st_connection, st->st_connection, NULL))	    {		struct ipsec_proto_info *pr = protoid == PROTO_IPSEC_AH		    ? &st->st_ah : &st->st_esp;		if (pr->present)		{		    if (pr->attrs.spi == spi)			return st;		    if (pr->our_spi == spi)			*bogus = TRUE;		}	    }	}    }    return NULL;}/* Find newest Phase 1 negotiation state object for suitable for connection c */struct state *find_phase1_state(const struct connection *c, lset_t ok_states){    struct state	*st,	*best = NULL;    int i;    for (i = 0; i < STATE_TABLE_SIZE; i++) {	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next) {	    if (LHAS(ok_states, st->st_state) 		&& c->host_pair == st->st_connection->host_pair		&& same_peer_ids(c, st->st_connection, NULL)		&& (best == NULL		    || best->st_serialno < st->st_serialno))		{		    best = st;		}	}    }    return best;}voidstate_eroute_usage(ip_subnet *ours, ip_subnet *his, unsigned long count, time_t nw){    struct state *st;    int i;    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)	{	    struct connection *c = st->st_connection;	    /* XXX spd-enum */	    if (IS_IPSEC_SA_ESTABLISHED(st->st_state)		&& c->spd.eroute_owner == st->st_serialno		&& c->spd.routing == RT_ROUTED_TUNNEL		&& samesubnet(&c->spd.this.client, ours)		&& samesubnet(&c->spd.that.client, his))	    {		if (st->st_outbound_count != count)		{		    st->st_outbound_count = count;		    st->st_outbound_time = nw;		}		return;	    }	}    }    DBG(DBG_CONTROL,	{	    char ourst[SUBNETTOT_BUF];	    char hist[SUBNETTOT_BUF];	    subnettot(ours, 0, ourst, sizeof(ourst));	    subnettot(his, 0, hist, sizeof(hist));	    DBG_log("unknown tunnel eroute %s -> %s found in scan"		, ourst, hist);	});}void fmt_state(struct state *st, time_t n, char *state_buf, size_t state_buf_len, char *state_buf2, size_t state_buf2_len){    /* what the heck is interesting about a state? */    const struct connection *c = st->st_connection;    long delta;    char inst[CONN_INST_BUF];    char dpdbuf[128];    const char *np1 = c->newest_isakmp_sa == st->st_serialno	? "; newest ISAKMP" : "";    const char *np2 = c->newest_ipsec_sa == st->st_serialno	? "; newest IPSEC" : "";    /* XXX spd-enum */    const char *eo = c->spd.eroute_owner == st->st_serialno	? "; eroute owner" : "";    fmt_conn_instance(c, inst);    if(st->st_event) {	delta = st->st_event->ev_time >= n	    ? (long)(st->st_event->ev_time - n)	    : -(long)(n - st->st_event->ev_time);    } else {	delta = -1;    }    if (IS_IPSEC_SA_ESTABLISHED(st->st_state))    {	dpdbuf[0]='\0';    } else {	if(st->hidden_variables.st_dpd) {	    time_t n = time(NULL);	    snprintf(dpdbuf, sizeof(dpdbuf), "; lastdpd=%lds(seq in:%u out:%u)"		     , st->st_last_dpd !=0 ? n - st->st_last_dpd : -1		     , st->st_dpd_seqno		     , st->st_dpd_expectseqno);	} else {	    snprintf(dpdbuf, sizeof(dpdbuf), "; nodpd");	}    }	    snprintf(state_buf, state_buf_len	     , "#%lu: \"%s\"%s:%u %s (%s); %s in %lds%s%s%s%s"	     , st->st_serialno	     , c->name, inst	     , st->st_remoteport	     , enum_name(&state_names, st->st_state)	     , state_story[st->st_state - STATE_MAIN_R0]	     , st->st_event ? enum_name(&timer_event_names, st->st_event->ev_type) : "none"	     , delta	     , np1, np2, eo, dpdbuf);    /* print out SPIs if SAs are established */    if (state_buf2_len != 0)	state_buf2[0] = '\0';	/* default to empty */    if (IS_IPSEC_SA_ESTABLISHED(st->st_state))    {	char lastused[40];	/* should be plenty long enough */	char buf[SATOT_BUF*6 + 1];	char *p = buf;#	define add_said(adst, aspi, aproto) { \	    ip_said s; \	    \	    initsaid(adst, aspi, aproto, &s); \	    if (p < &buf[sizeof(buf)-1]) \	    { \		*p++ = ' '; \		p += satot(&s, 0, p, &buf[sizeof(buf)] - p) - 1; \	    } \	}	/* XXX - mcr last used is really an attribute of the connection */	lastused[0] = '\0';	if (c->spd.eroute_owner == st->st_serialno	&& st->st_outbound_count != 0)	{	    snprintf(lastused, sizeof(lastused)		, " used %lus ago;"		, (unsigned long) (now() - st->st_outbound_time));	}	*p = '\0';	if (st->st_ah.present)	{	    add_said(&c->spd.that.host_addr, st->st_ah.attrs.spi, SA_AH);	    add_said(&c->spd.this.host_addr, st->st_ah.our_spi, SA_AH);	}	if (st->st_esp.present)	{	    add_said(&c->spd.that.host_addr, st->st_esp.attrs.spi, SA_ESP);	    add_said(&c->spd.this.host_addr, st->st_esp.our_spi, SA_ESP);	}	if (st->st_ipcomp.present)	{	    add_said(&c->spd.that.host_addr, st->st_ipcomp.attrs.spi, SA_COMP);	    add_said(&c->spd.this.host_addr, st->st_ipcomp.our_spi, SA_COMP);	}#ifdef KLIPS	if (st->st_ah.attrs.encapsulation == ENCAPSULATION_MODE_TUNNEL	|| st->st_esp.attrs.encapsulation == ENCAPSULATION_MODE_TUNNEL	|| st->st_ipcomp.attrs.encapsulation == ENCAPSULATION_MODE_TUNNEL)	{	    add_said(&c->spd.that.host_addr, st->st_tunnel_out_spi, SA_IPIP);	    add_said(&c->spd.this.host_addr, st->st_tunnel_in_spi, SA_IPIP);	}#endif	snprintf(state_buf2, state_buf2_len	    , "#%lu: \"%s\"%s%s%s"	    , st->st_serialno	    , c->name, inst	    , lastused	    , buf);#	undef add_said    }}/* * sorting logic is: * *  name *  type *  instance# *  isakmp_sa (XXX probably wrong) * */static intstate_compare(const void *a, const void *b){    const struct state *sap = *(const struct state *const *)a;    struct connection *ca = sap->st_connection;    const struct state *sbp = *(const struct state *const *)b;    struct connection *cb = sbp->st_connection;    /* DBG_log("comparing %s to %s", ca->name, cb->name); */    return connection_compare(ca, cb);}voidshow_states_status(void){    time_t n = now();    int i;    char state_buf[LOG_WIDTH];    char state_buf2[LOG_WIDTH];    int count;    struct state **array;    /* make count of states */    count = 0;    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	struct state *st;	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)	{	    count++;	}    }    /* build the array */    array = alloc_bytes(sizeof(struct state *)*count, "state array");    count = 0;    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	struct state *st;	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)	{	    array[count++]=st;	}    }    /* sort it! */    qsort(array, count, sizeof(struct state *), state_compare);    /* now print sorted results */    for (i = 0; i < count; i++)    {	struct state *st;	st = array[i];	fmt_state(st, n, state_buf, sizeof(state_buf)		  , state_buf2, sizeof(state_buf2));	whack_log(RC_COMMENT, state_buf);	if (state_buf2[0] != '\0')	    whack_log(RC_COMMENT, state_buf2);	/* show any associated pending Phase 2s */	if (IS_PHASE1(st->st_state))	    show_pending_phase2(st->st_connection, st);    }    /* free the array */    pfree(array);}/* Given that we've used up a range of unused CPI's, * search for a new range of currently unused ones. * Note: this is very expensive when not trivial! * If we can't find one easily, choose 0 (a bad SPI, * no matter what order) indicating failure. */voidfind_my_cpi_gap(cpi_t *latest_cpi, cpi_t *first_busy_cpi){    int tries = 0;    cpi_t base = *latest_cpi;    cpi_t closest;    int i;startover:    closest = ~0;	/* not close at all */    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	struct state *st;	for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)	{	    if (st->st_ipcomp.present)	    {		cpi_t c = ntohl(st->st_ipcomp.our_spi) - base;		if (c < closest)		{		    if (c == 0)		    {			/* oops: next spot is occupied; start over */			if (++tries == 20)			{			    /* FAILURE */			    *latest_cpi = *first_busy_cpi = 0;			    return;			}			base++;			if (base > IPCOMP_LAST_NEGOTIATED)			    base = IPCOMP_FIRST_NEGOTIATED;			goto startover;	/* really a tail call */		    }		    closest = c;		}	    }	}    }    *latest_cpi = base;	/* base is first in next free range */    *first_busy_cpi = closest + base;	/* and this is the roof */}/* Muck with high-order 16 bits of this SPI in order to make * the corresponding SAID unique. * Its low-order 16 bits hold a well-known IPCOMP CPI. * Oh, and remember that SPIs are stored in network order. * Kludge!!!  So I name it with the non-English word "uniquify". * If we can't find one easily, return 0 (a bad SPI, * no matter what order) indicating failure. */ipsec_spi_tuniquify_his_cpi(ipsec_spi_t cpi, struct state *st){    int tries = 0;    int i;startover:    /* network order makes first two bytes our target */    get_rnd_bytes((u_char *)&cpi, 2);    /* Make sure that the result is unique.     * Hard work.  If there is no unique value, we'll loop forever!     */    for (i = 0; i < STATE_TABLE_SIZE; i++)    {	struct state *s;	for (s = statetable[i]; s != NULL; s = s->st_hashchain_next)	{	    if (s->st_ipcomp.present	    && sameaddr(&s->st_connection->spd.that.host_addr	      , &st->st_connection->spd.that.host_addr)	    && cpi == s->st_ipcomp.attrs.spi)	    {		if (++tries == 20)		    return 0;	/* FAILURE */		goto startover;	    }	}    }    return cpi;}/*  * Immediately schedule a replace event for all states for a peer. */void replace_states_by_peer(ip_address *peer){    struct state *st = NULL;    int i;    /* struct event *ev;     currently unused */    for (i = 0; st == NULL && i < STATE_TABLE_SIZE; i++)        for (st = statetable[i]; st != NULL; st = st->st_hashchain_next)            /* Only replace if it already has a replace event. */            if (sameaddr(&st->st_connection->spd.that.host_addr, peer)                    && (IS_ISAKMP_SA_ESTABLISHED(st->st_state) || IS_IPSEC_SA_ESTABLISHED(st->st_state))                    && st->st_event->ev_type == EVENT_SA_REPLACE)            {                delete_event(st);                delete_dpd_event(st);                event_schedule(EVENT_SA_REPLACE, 0, st);            }}void copy_quirks(struct isakmp_quirks *dq		 , struct isakmp_quirks *sq){    dq->xauth_ack_msgid   |= sq->xauth_ack_msgid;    dq->modecfg_pull_mode |= sq->modecfg_pull_mode;    dq->nat_traversal_vid |= sq->nat_traversal_vid;}void set_state_ike_endpoints(struct state *st			     , struct connection *c){    /* reset our choice of interface */    c->interface = NULL;    orient(c);    st->st_localaddr  = c->spd.this.host_addr;    st->st_localport  = c->spd.this.host_port;    st->st_remoteaddr = c->spd.that.host_addr;    st->st_remoteport = c->spd.that.host_port;    st->st_interface = c->interface;}/* * Local Variables: * c-basic-offset:4 * End: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区三区在线不卡| 亚洲午夜免费电影| 成人一二三区视频| 国产不卡免费视频| 久久精品国产亚洲高清剧情介绍 | 精品粉嫩aⅴ一区二区三区四区| 欧美猛男男办公室激情| 国产aⅴ综合色| 成人a区在线观看| 99久久婷婷国产综合精品| 国产精品99久久不卡二区| 国产一二精品视频| 成人福利在线看| 91在线观看地址| 91在线视频官网| 在线观看一区二区视频| 欧美区视频在线观看| 欧美美女一区二区三区| 56国语精品自产拍在线观看| 欧美高清一级片在线| 欧美videossexotv100| 国产色婷婷亚洲99精品小说| 日韩免费在线观看| 精品国产欧美一区二区| 国产欧美精品国产国产专区| 国产精品卡一卡二| 天堂在线一区二区| 国产成人综合在线| 欧美视频在线一区二区三区 | 国产麻豆成人精品| 成人高清伦理免费影院在线观看| 在线视频国内自拍亚洲视频| 6080亚洲精品一区二区| 日本一区二区视频在线观看| 亚洲高清视频的网址| 国产尤物一区二区在线| 97久久久精品综合88久久| 欧美色偷偷大香| 欧美大片国产精品| 国产欧美一区二区精品婷婷| 国产精品久久精品日日| 日本欧美一区二区| 成人av资源在线| 欧美日韩中文精品| 久久综合色之久久综合| 亚洲美女视频一区| 国产成人免费视频网站| 6080午夜不卡| 一区二区三区四区激情| 麻豆国产精品一区二区三区 | 亚洲欧美日韩成人高清在线一区| 免费三级欧美电影| 欧美午夜在线一二页| 中文av字幕一区| 精品制服美女久久| 欧美一卡二卡三卡| 亚洲一区二区3| 91浏览器打开| 国产精品久久久久久一区二区三区 | 中文字幕第一区综合| 精品一区免费av| 日韩欧美国产一区在线观看| 亚洲成人一二三| 91亚洲午夜精品久久久久久| 精品国产乱码久久久久久影片| 亚洲一区二区视频| 91麻豆.com| 亚洲欧洲日本在线| 成人黄色小视频在线观看| 久久免费视频色| 国产乱人伦偷精品视频不卡| 欧美日韩另类一区| 一区二区国产视频| 91丝袜高跟美女视频| 亚洲欧洲国产日本综合| 成人性生交大片免费看中文 | 成人动漫精品一区二区| 国产午夜精品一区二区三区四区| 日本不卡一区二区三区高清视频| 欧美视频中文一区二区三区在线观看| 亚洲女人****多毛耸耸8| 99视频精品免费视频| 欧美激情一区二区三区蜜桃视频| 国内精品国产成人国产三级粉色| 日韩欧美国产三级| 日韩电影在线观看一区| 久久综合给合久久狠狠狠97色69| 伊人夜夜躁av伊人久久| 欧美日韩国产片| 久久国产三级精品| 欧美经典一区二区| 色综合久久99| 人禽交欧美网站| 国产拍欧美日韩视频二区| 99re这里只有精品视频首页| 亚洲老妇xxxxxx| 91精品国产乱| 国产精品 欧美精品| 1024成人网| 欧美精品乱人伦久久久久久| 精品一区二区三区免费毛片爱| 国产精品视频一二三| 欧美日韩在线不卡| 国产盗摄一区二区三区| 亚洲天堂a在线| 日韩欧美国产精品| 色综合天天视频在线观看| 日韩精品国产欧美| 国产精品福利电影一区二区三区四区| 欧美天堂一区二区三区| 国产剧情一区在线| 亚洲图片欧美一区| 国产日韩一级二级三级| 在线国产亚洲欧美| 国产精一品亚洲二区在线视频| 亚洲影院理伦片| 国产亚洲午夜高清国产拍精品 | 精品久久久久久久久久久久包黑料 | 日韩欧美卡一卡二| 91老司机福利 在线| 国内精品伊人久久久久av一坑 | 青青草97国产精品免费观看无弹窗版| 国产午夜精品一区二区| 欧美一区中文字幕| 在线日韩av片| k8久久久一区二区三区| 免费看精品久久片| 亚洲超丰满肉感bbw| 国产精品免费视频网站| 精品欧美乱码久久久久久1区2区| 欧美色图片你懂的| av不卡在线观看| 国产一区二区三区免费播放| 亚洲一区二区三区中文字幕| 中文字幕中文乱码欧美一区二区 | 成人精品一区二区三区中文字幕| 免费的成人av| 亚洲成人免费观看| 一区二区欧美在线观看| 一区二区三区在线观看动漫 | 亚洲国产精品久久一线不卡| 国产精品卡一卡二| 欧美激情综合网| 久久男人中文字幕资源站| 欧美一区二区久久| 91 com成人网| 91精品国产91综合久久蜜臀| 在线成人小视频| 欧美精品在线一区二区| 欧美视频在线一区| 欧美女孩性生活视频| 91在线无精精品入口| jlzzjlzz亚洲女人18| 99久久婷婷国产| 91美女精品福利| 国精产品一区一区三区mba视频 | 亚洲夂夂婷婷色拍ww47| 国产精品污www在线观看| 亚洲国产高清在线观看视频| 国产女人aaa级久久久级 | 婷婷开心激情综合| 日韩在线一区二区| 久久精品国内一区二区三区| 久久av中文字幕片| 国产夫妻精品视频| 99re视频精品| 欧美久久久久久蜜桃| 日韩欧美aaaaaa| 国产午夜亚洲精品理论片色戒| 国产精品久久久久久久午夜片| 亚洲女与黑人做爰| 日本欧美久久久久免费播放网| 久久www免费人成看片高清| 国产高清在线观看免费不卡| 白白色 亚洲乱淫| 欧美日韩国产成人在线免费| 日韩女优av电影| 国产精品欧美一区二区三区| 一区二区三区四区av| 日本午夜一本久久久综合| 国产一区二区三区高清播放| 成人性生交大片免费看中文 | 午夜精品久久久久久久99水蜜桃| 美腿丝袜在线亚洲一区| 国产91精品精华液一区二区三区 | 尤物视频一区二区| 老司机免费视频一区二区三区| 国产精品影音先锋| 精品视频在线免费| 久久久久99精品国产片| 亚洲美女在线一区| 国产综合久久久久久鬼色| 色诱视频网站一区| 久久久www免费人成精品| 亚洲一区二区三区中文字幕| 精品一区二区三区免费视频| 欧美主播一区二区三区美女| 亚洲精品一区二区精华| 午夜精品在线视频一区| 91一区二区在线|