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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? iproute2.diff

?? 基于linux內(nèi)核2.6.9的mpls補(bǔ)丁
?? DIFF
?? 第 1 頁 / 共 3 頁
字號(hào):
diff -uNr iproute2/include/linux/rtnetlink.h iproute2-mpls-1.1/include/linux/rtnetlink.h--- iproute2/include/linux/rtnetlink.h	2004-12-22 16:11:55.000000000 -0600+++ iproute2-mpls-1.1/include/linux/rtnetlink.h	2004-12-22 23:31:16.000000000 -0600@@ -214,6 +214,8 @@ 	RTA_FLOW, 	RTA_CACHEINFO, 	RTA_SESSION,+	RTA_SPEC_PROTO,+	RTA_SPEC_DATA, 	__RTA_MAX }; @@ -237,6 +239,8 @@ 	unsigned char		rtnh_flags; 	unsigned char		rtnh_hops; 	int			rtnh_ifindex;+        unsigned int            rtnh_spec_proto;+        unsigned int            rtnh_spec_data; };  /* rtnh_flags */diff -uNr iproute2/include/utils.h iproute2-mpls-1.1/include/utils.h--- iproute2/include/utils.h	2004-12-22 16:11:56.000000000 -0600+++ iproute2-mpls-1.1/include/utils.h	2004-12-30 15:29:00.000000000 -0600@@ -61,6 +61,11 @@ 	u_int8_t  ipx_node[IPX_NODE_LEN]; }; +#ifndef AF_MPLS+#define AF_MPLS 30+#define PF_MPLS AF_MPLS+#endif+ extern __u32 get_addr32(const char *name); extern int get_addr_1(inet_prefix *dst, const char *arg, int family); extern int get_prefix_1(inet_prefix *dst, const char *arg, int family);diff -uNr iproute2/ip/iproute.c iproute2-mpls-1.1/ip/iproute.c--- iproute2/ip/iproute.c	2004-12-22 16:11:56.000000000 -0600+++ iproute2-mpls-1.1/ip/iproute.c	2004-12-22 16:35:09.000000000 -0600@@ -54,7 +54,7 @@ 	fprintf(stderr, "             [ table TABLE_ID ] [ proto RTPROTO ]\n"); 	fprintf(stderr, "             [ scope SCOPE ] [ metric METRIC ]\n"); 	fprintf(stderr, "INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...\n");-	fprintf(stderr, "NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS\n");+	fprintf(stderr, "NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] [ spec_nh PROTO DATA ] NHFLAGS\n"); 	fprintf(stderr, "OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]\n"); 	fprintf(stderr, "           [ rtt NUMBER ] [ rttvar NUMBER ]\n"); 	fprintf(stderr, "           [ window NUMBER] [ cwnd NUMBER ] [ ssthresh REALM ]\n");@@ -91,6 +91,7 @@ 	inet_prefix mdst; 	inet_prefix rsrc; 	inet_prefix msrc;+	unsigned short spec_nh; } filter;  static int flush_update(void)@@ -254,6 +255,13 @@ 		if ((oif^filter.oif)&filter.oifmask) 			return 0; 	}+	if (filter.spec_nh) {+		unsigned short spec_nh = 0;+		if (tb[RTA_SPEC_PROTO])+			spec_nh = ntohs(*(unsigned short*)RTA_DATA(tb[RTA_SPEC_PROTO]));+		if (filter.spec_nh && spec_nh != filter.spec_nh)+			return 0;+	} 	if (filter.flushb &&  	    r->rtm_family == AF_INET6 && 	    r->rtm_dst_len == 0 &&@@ -261,7 +269,6 @@ 	    tb[RTA_PRIORITY] && 	    *(int*)RTA_DATA(tb[RTA_PRIORITY]) == -1) 		return 0;- 	if (filter.flushb) { 		struct nlmsghdr *fn; 		if (NLMSG_ALIGN(filter.flushp) + n->nlmsg_len > filter.flushe) {@@ -335,6 +342,8 @@ 	} 	if (tb[RTA_OIF] && filter.oifmask != -1) 		fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF])));+	if (tb[RTA_SPEC_PROTO])+		fprintf(fp, "spec_nh 0x%04x 0x%08x ", ntohs(*(unsigned short*)RTA_DATA(tb[RTA_SPEC_PROTO])), *(__u32*)RTA_DATA(tb[RTA_SPEC_DATA]));  	if (!(r->rtm_flags&RTM_F_CLONED)) { 		if (r->rtm_table != RT_TABLE_MAIN && !filter.tb)@@ -592,6 +601,20 @@ 			rtnh->rtnh_hops = w - 1; 		} else if (strcmp(*argv, "onlink") == 0) { 			rtnh->rtnh_flags |= RTNH_F_ONLINK;+		} else if (strcmp(*argv, "spec_nh") == 0) {+			unsigned short proto;+			__u32 data;+			NEXT_ARG();+			if (get_u16(&proto, *argv, 0))+				invarg("\"spec_nh proto\" value is invalid\n",+					*argv);+			NEXT_ARG();+			if (get_u32(&data, *argv, 0))+				invarg("\"spec_nh data\" value is invalid\n",+					*argv);++			rtnh->rtnh_spec_proto = htons(proto);+			rtnh->rtnh_spec_data = data; 		} else 			break; 	}@@ -689,6 +712,22 @@ 			if (req.r.rtm_family == AF_UNSPEC) 				req.r.rtm_family = addr.family; 			addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen);+		} else if (strcmp(*argv, "spec_nh") == 0) {+			unsigned short proto;+			__u32 data;+			NEXT_ARG();+			if (get_u16(&proto, *argv, 0))+				invarg("\"spec_nh proto\" value is invalid\n",+					*argv);+			NEXT_ARG();+			if (get_u32(&data, *argv, 0))+				invarg("\"spec_nh data\" value is invalid\n",+					*argv);++			proto = htons(proto);+			addattr_l(&req.n, sizeof(req), RTA_SPEC_PROTO, &proto, 4);+			addattr32(&req.n, sizeof(req), RTA_SPEC_DATA, data);+			 		} else if (strcmp(*argv, "from") == 0) { 			inet_prefix addr; 			NEXT_ARG();@@ -1055,6 +1094,10 @@ 		} else if (strcmp(*argv, "src") == 0) { 			NEXT_ARG(); 			get_prefix(&filter.rprefsrc, *argv, do_ipv6);+		} else if (matches(*argv, "spec_nh") == 0) {+			NEXT_ARG();+			get_u16(&filter.spec_nh, *argv, 0);+			filter.spec_nh = htons(filter.spec_nh); 		} else if (matches(*argv, "realms") == 0) { 			__u32 realm; 			NEXT_ARG();@@ -1267,6 +1310,22 @@ 			   strcmp(*argv, "dev") == 0) { 			NEXT_ARG(); 			odev = *argv;+		} else if (matches(*argv, "spec_nh") == 0) {+			unsigned short proto;+			__u32 data;+			NEXT_ARG();+			if (get_u16(&proto, *argv, 0))+				invarg("\"spec_nh proto\" value is invalid\n",+					*argv);+			NEXT_ARG();+			if (get_u32(&data, *argv, 0))+				invarg("\"spec_nh data\" value is invalid\n",+					*argv);++			proto = htons(proto);+			addattr_l(&req.n, sizeof(req), RTA_SPEC_PROTO, &proto, 4);+			addattr32(&req.n, sizeof(req), RTA_SPEC_DATA, data);+ 		} else if (matches(*argv, "notify") == 0) { 			req.r.rtm_flags |= RTM_F_NOTIFY; 		} else if (matches(*argv, "connected") == 0) {@@ -1355,6 +1414,10 @@ 		} 		if (!odev && tb[RTA_OIF]) 			tb[RTA_OIF]->rta_type = 0;+		if (tb[RTA_SPEC_PROTO]) {+			tb[RTA_SPEC_PROTO]->rta_type = 0;+			tb[RTA_SPEC_DATA]->rta_type = 0;+		} 		if (tb[RTA_GATEWAY]) 			tb[RTA_GATEWAY]->rta_type = 0; 		if (!idev && tb[RTA_IIF])diff -uNr iproute2/Makefile iproute2-mpls-1.1/Makefile--- iproute2/Makefile	2004-12-22 16:11:56.000000000 -0600+++ iproute2-mpls-1.1/Makefile	2004-12-22 16:37:51.000000000 -0600@@ -26,7 +26,7 @@  LDLIBS += -L../lib -lnetlink -lutil -SUBDIRS=lib ip tc misc+SUBDIRS=lib ip mpls tc misc  LIBNETLINK=../lib/libnetlink.a ../lib/libutil.a diff -uNr iproute2/mpls/Makefile iproute2-mpls-1.1/mpls/Makefile--- iproute2/mpls/Makefile	1969-12-31 18:00:00.000000000 -0600+++ iproute2-mpls-1.1/mpls/Makefile	2005-01-05 22:53:24.000000000 -0600@@ -0,0 +1,19 @@+MPLSOBJ=mpls.o mpls_monitor.o++include ../Config++MPLSMODULES :=++MPLSLIB := ++LDFLAGS += -Wl,-export-dynamic -lm++all: mpls ++mpls: $(MPLSOBJ) $(LIBNETLINK) $(LIBUTIL) $(MPLSLIB) ++install: all+	install -m 0755 -s mpls $(DESTDIR)$(SBINDIR)++clean:+	rm -f $(MPLSOBJ) $(MPLSLIB) mplsdiff -uNr iproute2/mpls/mpls.c iproute2-mpls-1.1/mpls/mpls.c--- iproute2/mpls/mpls.c	1969-12-31 18:00:00.000000000 -0600+++ iproute2-mpls-1.1/mpls/mpls.c	2005-01-22 00:29:25.000000000 -0600@@ -0,0 +1,1302 @@+/*+ * mpls.c		"mpls" utility frontend.+ *+ *		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.+ *+ * Heavly based on 'l2c' code from Jamal Hadi Salim+ *+ *+ */++#include <stdio.h>+#include <stdlib.h>+#include <unistd.h>+#include <syslog.h>+#include <fcntl.h>+#include <dlfcn.h>+#include <sys/socket.h>+#include <netinet/in.h>+#include <arpa/inet.h>+#include <string.h>+#include <errno.h>+#include <math.h>+#include <asm/types.h>+#include <linux/if_ether.h>+#include <linux/gen_stats.h>+#include <linux/mpls.h>+#include <linux/socket.h>++#include "SNAPSHOT.h"+#include "utils.h"++int show_stats = 0;+int show_details = 0;+int show_raw = 0;+int resolve_hosts = 0;+struct rtnl_handle rth1;++extern int do_mplsmonitor(int argc, char **argv);++static void usage(void)+{+	fprintf(stderr, "Usage: mpls ilm CMD label LABEL labelspace NUMBER [proto PROTO | instructions INSTR]\n");+	fprintf(stderr, "       mpls nhlfe CMD key KEY [mtu MTU propagate_ttl | instructions INSTR]\n");+	fprintf(stderr, "       mpls xc CMD ilm_label LABEL ilm_labelspace NUMBER nhlfe_key KEY\n");+	fprintf(stderr, "       mpls labelspace CMD dev NAME labelspace NUMBER\n");+	fprintf(stderr, "       mpls tunnel CMD dev NAME key KEY\n");+	fprintf(stderr, "\n");+	fprintf(stderr, "       mpls ilm show [label LABEL labelspace NUMBER]\n");+	fprintf(stderr, "       mpls nhlfe show [key KEY]\n");+	fprintf(stderr, "       mpls xc show [ilm_label LABEL ilm_labelspace NUMBER]\n");+	fprintf(stderr, "       mpls labelspace show [dev NAME]\n");+	fprintf(stderr, "       mpls monitor ...\n");+	fprintf(stderr, "\n");+	fprintf(stderr, "Where:\n");+	fprintf(stderr, "CMD    := add | del | change\n");+	fprintf(stderr, "NUMBER := 0 .. 255\n");+	fprintf(stderr, "TYPE   := gen | atm | fr\n");+	fprintf(stderr, "VALUE  := 16 .. 1048575 | <VPI>/<VCI> | 16 .. 1023\n");+	fprintf(stderr, "LABEL  := TYPE VALUE\n");+	fprintf(stderr, "KEY    := 0 for add | previously returned key\n");+	fprintf(stderr, "NAME   := network device name (i.e. eth0)\n");+	fprintf(stderr, "PROTO  := ipv4 | ipv6\n");+	fprintf(stderr, "ADDR   := ipv6 or ipv4 address\n");+	fprintf(stderr, "NH     := nexthop NAME [none | PROTO ADDR]\n");+	fprintf(stderr, "FWD    := forward KEY\n");+	fprintf(stderr, "PUSH   := push LABEL\n");+	fprintf(stderr, "INSTR  := NH | PUSH | pop | deliver | peek | FWD |\n");+	fprintf(stderr, "          set-dscp <DSCP> | set-exp <EXP> |\n");+	fprintf(stderr, "          set-tcindex <TCINDEX> | set-rx-if <NAME>\n");+	fprintf(stderr, "          forward <KEY> | expfwd <EXP> <KEY> ... |\n");+	fprintf(stderr, "          exp2tc <EXP> <TCINDEX> ... | exp2ds <EXP> <DSCP> ... |\n");+	fprintf(stderr, "          nffwd <MASK> [ <NFMARK> <KEY> ... ] |\n");+	fprintf(stderr, "          nf2exp <MASK> [ <NFMARK> <EXP> ... ] |\n");+	fprintf(stderr, "          tc2exp <MASK> [ <TCINDEX> <EXP> ... ] |\n");+	fprintf(stderr, "          ds2exp <MASK> [ <DSCP> <EXP> ... ] |\n");+	fprintf(stderr, "          dsfwd <MASK> [ <DSCP> <KEY> ... ]\n");+	fprintf(stderr, "\n");+	exit(-1);+}++int mpls_list(int cmd,int argc, char **argv);++int mpls_table_list(int argc, char **argv)+{+	if (argc <= 0) {+		mpls_list(MPLS_RTM_GETNHLFE,0,NULL);+		mpls_list(MPLS_RTM_GETILM ,0,NULL);+		mpls_list(MPLS_RTM_GETXC ,0,NULL);+		mpls_list(MPLS_RTM_GETLABELSPACE ,0,NULL);+	}+	return 0;+}++void+mpls_parse_label (struct mpls_label *label, int *pargc, char ***pargv) {+	unsigned int l1, l2;+	char *value;+	int argc = *pargc;+	char **argv = *pargv;++	if (strncmp(*argv, "fr", 2) == 0) {+		label->ml_type = MPLS_LABEL_FR;+	} else if (strncmp(*argv, "atm", 3) == 0) {+		label->ml_type = MPLS_LABEL_ATM;+	} else if (strncmp(*argv, "gen", 3) == 0) {+		label->ml_type = MPLS_LABEL_GEN;+	} else {+		invarg(*argv, "invalid mpls label type");+	}++	NEXT_ARG();+	value = *argv;++	switch (label->ml_type) {+		case MPLS_LABEL_GEN:+			if (get_unsigned(&l1, value, 0) || l1 > 1048575)+				invarg(value, "invalid label value");+			label->u.ml_gen = l1;+			break;+		case MPLS_LABEL_ATM:+			if (sscanf(value, "%u/%d", &l1, &l2) != 2)+				invarg(value, "invalid label value");+			label->u.ml_atm.mla_vpi = l1;+			label->u.ml_atm.mla_vci = l2;+		case MPLS_LABEL_FR:+			if (get_unsigned(&l1, value, 0) || l1 > 1023)+				invarg(value, "invalid label value");+			label->u.ml_fr = l1;+		default:+			fprintf(stderr, "Invalid label type!\n");+			exit(-1);+	}+	*pargc = argc;+	*pargv = argv;+}++void+mpls_parse_instr(struct mpls_instr_req *instr, int *pargc, char ***pargv,+	int direction) {+	int argc = *pargc;+	char **argv = *pargv;+	int c = 0;++	while (argc > 0) {+		if (strcmp(*argv, "nexthop") == 0) {+			NEXT_ARG();+			inet_prefix addr;+			instr->mir_instr[c].mir_opcode = MPLS_OP_SET;+			instr->mir_instr[c].mir_set.mni_if =+				ll_name_to_index(*argv);+			NEXT_ARG();+			if (strcmp(*argv, "ipv4") == 0) {+				struct sockaddr_in *sin = (struct sockaddr_in*)+					&instr->mir_instr[c].mir_set.mni_addr;+				NEXT_ARG();+				get_addr(&addr, *argv, AF_INET);+				sin->sin_family = AF_INET;+				memcpy(&sin->sin_addr, &addr.data,+					addr.bytelen);+			} else if (strcmp(*argv, "ipv6") == 0) {+				struct sockaddr_in6 *sin6=(struct sockaddr_in6*)+					&instr->mir_instr[c].mir_set.mni_addr;+				NEXT_ARG();+				get_addr(&addr, *argv, AF_INET6);+				sin6->sin6_family = AF_INET6;+				memcpy(&sin6->sin6_addr, &addr.data,+					addr.bytelen);+			} else if (strcmp(*argv, "none") == 0) {+				struct sockaddr *s =+					&instr->mir_instr[c].mir_set.mni_addr;+				NEXT_ARG();+				memset(s, 0, sizeof(struct sockaddr));+				continue;+			} else {+				invarg(*argv, "invalid nexthop type");+			}+		} else if (strcmp(*argv, "push") == 0) {+			NEXT_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_PUSH;+			*pargc = argc; *pargv = argv;+			mpls_parse_label(&instr->mir_instr[c].mir_push,+				pargc, pargv);+			argc = *pargc; argv = *pargv;+		} else if (strcmp(*argv, "forward") == 0) {+			__u32 key;+			NEXT_ARG();+			if (get_unsigned(&key, *argv, 0))+				invarg(*argv, "invalid key");+			instr->mir_instr[c].mir_fwd.ml_type = MPLS_LABEL_KEY;+			instr->mir_instr[c].mir_fwd.u.ml_key = key;+			instr->mir_instr[c].mir_opcode = MPLS_OP_FWD;+		} else if (strcmp(*argv, "pop") == 0) {+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			instr->mir_instr[c].mir_opcode = MPLS_OP_POP;+		} else if (strcmp(*argv, "peek") == 0) {+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			instr->mir_instr[c].mir_opcode = MPLS_OP_PEEK;+		} else if (strcmp(*argv, "deliver") == 0) {+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			instr->mir_instr[c].mir_opcode = MPLS_OP_DLV;+		} else if (strcmp(*argv, "set-dscp") == 0) {+			__u32 dscp;+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			NEXT_ARG();+			if (get_unsigned(&dscp, *argv, 0))+				invarg(*argv, "invalid DSCP");+			instr->mir_instr[c].mir_opcode = MPLS_OP_SET_DS;+			instr->mir_instr[c].mir_set_ds = dscp;+		} else if (strcmp(*argv, "set-tcindex") == 0) {+			__u32 tcindex;+			NEXT_ARG();+			if (get_unsigned(&tcindex, *argv, 0))+				invarg(*argv, "invalid TCINDEX");+			instr->mir_instr[c].mir_opcode = MPLS_OP_SET_TC;+			instr->mir_instr[c].mir_set_tc = tcindex;+		} else if (strcmp(*argv, "set-exp") == 0) {+			__u32 exp;+			NEXT_ARG();+			if (get_unsigned(&exp, *argv, 0))+				invarg(*argv, "invalid EXP");+			instr->mir_instr[c].mir_opcode = MPLS_OP_SET_EXP;+			instr->mir_instr[c].mir_set_exp = exp;+		} else if (strcmp(*argv, "set-rx-if") == 0) {+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			NEXT_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_SET_RX;+			instr->mir_instr[c].mir_set_rx =ll_name_to_index(*argv);+		} else if (strcmp(*argv, "expfwd") == 0) {+			int done = 0;+			int exp;+			int key;+			do {+				NEXT_ARG();+				if (get_unsigned(&exp, *argv, 0)) {+					done = 1;+					break;+				}+				NEXT_ARG();+				if (get_unsigned(&key, *argv, 0)) {+					done = 1;+					break;+				}+				instr->mir_instr[c].mir_exp_fwd.ef_key[exp] = key;+			} while (!done);+			PREV_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_EXP_FWD;+		} else if (strcmp(*argv, "exp2tc") == 0) {+			int done = 0;+			int exp;+			int tcindex;+			do {+				NEXT_ARG();+				if (get_unsigned(&exp, *argv, 0)) {+					done = 1;+					break;+				}+				NEXT_ARG();+				if (get_unsigned(&tcindex, *argv, 0)) {+					done = 1;+					break;+				}+				instr->mir_instr[c].mir_exp2tc.e2t[exp] = tcindex;+			} while (!done);+			PREV_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_EXP2TC;+		} else if (strcmp(*argv, "exp2ds") == 0) {+			int done = 0;+			int exp;+			int dscp;+			if (direction == MPLS_OUT)+				invarg(*argv, "invalid NHLFE instruction");+			do {+				NEXT_ARG();+				if (get_unsigned(&exp, *argv, 0)) {+					done = 1;+					break;+				}+				NEXT_ARG();+				if (get_unsigned(&dscp, *argv, 0)) {+					done = 1;+					break;+				}+				instr->mir_instr[c].mir_exp2ds.e2d[exp] = dscp;+			} while (!done);+			PREV_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_EXP2DS;+		} else if (strcmp(*argv, "nffwd") == 0) {+			int done = 0;+			int nfmark;+			int key;+			int mask;+			NEXT_ARG();+			if (!get_unsigned(&mask, *argv, 0)) {+				instr->mir_instr[c].mir_nf_fwd.nf_mask = mask;+				do {+					NEXT_ARG();+					if (get_unsigned(&nfmark, *argv, 0)) {+						done = 1;+						break;+					}+					NEXT_ARG();+					if (get_unsigned(&key, *argv, 0)) {+						done = 1;+						break;+					}+					instr->mir_instr[c].mir_nf_fwd.nf_key[nfmark] = key;+				} while (!done);+			}+			PREV_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_NF_FWD;+		} else if (strcmp(*argv, "nf2exp") == 0) {+			int done = 0;+			int nfmark;+			int exp;+			int mask;+			NEXT_ARG();+			if (!get_unsigned(&mask, *argv, 0)) {+				instr->mir_instr[c].mir_nf2exp.n2e_mask = mask;+				do {+					NEXT_ARG();+					if (get_unsigned(&nfmark, *argv, 0)) {+						done = 1;+						break;+					}+					NEXT_ARG();+					if (get_unsigned(&exp, *argv, 0)) {+						done = 1;+						break;+					}+					instr->mir_instr[c].mir_nf2exp.n2e[nfmark] = exp;+				} while (!done);+			}+			PREV_ARG();+			instr->mir_instr[c].mir_opcode = MPLS_OP_NF2EXP;+		} else if (strcmp(*argv, "tc2exp") == 0) {+			int done = 0;+			int tcindex;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产欧美在线| 7777精品伊人久久久大香线蕉的 | 日日摸夜夜添夜夜添亚洲女人| 色综合久久中文字幕| 国产精品乱码一区二区三区软件 | 日韩国产欧美在线播放| 欧美喷潮久久久xxxxx| 日本不卡的三区四区五区| 欧美一区二区三区男人的天堂| 日韩电影一区二区三区| 欧美不卡在线视频| 国产凹凸在线观看一区二区| 国产精品久久久久一区二区三区共| 成人黄页在线观看| 一区二区不卡在线播放| 欧美日韩夫妻久久| 国产一区二区在线影院| 欧美国产精品一区二区| 色综合久久99| 日韩精品一二区| 精品精品国产高清a毛片牛牛| 国产精品亚洲一区二区三区妖精| 国产精品天美传媒沈樵| 欧美亚洲动漫另类| 韩国中文字幕2020精品| 国产精品不卡在线| 在线播放一区二区三区| 国产精品亚洲成人| 亚洲精品国产一区二区三区四区在线 | 91麻豆精品国产91久久久资源速度 | 日韩一区日韩二区| 91麻豆精品国产91久久久久久久久| 蜜臂av日日欢夜夜爽一区| 国产精品欧美一级免费| 91精品欧美一区二区三区综合在 | 成人午夜私人影院| 五月天国产精品| 中文字幕亚洲在| 欧美成人精精品一区二区频| 色综合色综合色综合色综合色综合| 麻豆成人久久精品二区三区红| 亚洲卡通欧美制服中文| 国产日产精品一区| 日韩视频免费观看高清完整版| 91蜜桃免费观看视频| 国内国产精品久久| 青椒成人免费视频| 亚洲自拍欧美精品| 中文字幕一区二区视频| 久久久久久久网| 日韩一区二区免费在线观看| 在线免费不卡电影| 99久久精品久久久久久清纯| 国产精品自在在线| 久久精品99国产国产精| 天天色天天爱天天射综合| 亚洲免费看黄网站| 国产精品乱码一区二三区小蝌蚪| 精品粉嫩aⅴ一区二区三区四区| 欧美男同性恋视频网站| 在线观看一区不卡| 91在线观看地址| 成人97人人超碰人人99| 高清不卡一区二区在线| 久久丁香综合五月国产三级网站| 石原莉奈在线亚洲二区| 亚洲午夜久久久| 亚洲小少妇裸体bbw| 亚洲乱码国产乱码精品精可以看 | 国内国产精品久久| 国产一区激情在线| 国产在线播放一区二区三区| 天天免费综合色| 天堂资源在线中文精品| 视频一区欧美日韩| 日本成人超碰在线观看| 六月丁香综合在线视频| 久久99国产乱子伦精品免费| 久久国产精品色| 国产风韵犹存在线视精品| 国产91色综合久久免费分享| 国产91对白在线观看九色| 成人午夜看片网址| 91麻豆免费观看| 色哟哟欧美精品| 欧美精品一级二级三级| 日韩欧美国产成人一区二区| 欧美成人性福生活免费看| 久久久久久久久伊人| 国产精品午夜电影| 亚洲乱码国产乱码精品精98午夜| 一区二区三区高清在线| 日韩综合小视频| 国产一区二区三区四区五区入口| 国产不卡视频一区| 在线免费观看成人短视频| 欧美一级片免费看| 久久久www成人免费毛片麻豆| 国产精品久久久久久久久快鸭 | 欧美变态凌虐bdsm| 久久精品水蜜桃av综合天堂| 成人免费一区二区三区视频| 亚洲大片免费看| 久久99国产精品久久99| gogogo免费视频观看亚洲一| 欧美日韩综合在线| 久久婷婷一区二区三区| 亚洲欧美另类图片小说| 免费观看日韩av| 97se狠狠狠综合亚洲狠狠| 91精品国产综合久久精品图片| 久久亚洲精精品中文字幕早川悠里| 中文字幕一区二区在线播放| 性感美女久久精品| 国产成人精品aa毛片| 欧美日韩欧美一区二区| 亚洲国产精品高清| 石原莉奈一区二区三区在线观看| 国产成人av影院| 91麻豆精品国产91久久久久久 | 国产九色精品成人porny| 99久久国产综合精品女不卡| 欧美一级二级三级蜜桃| 亚洲人成精品久久久久| 麻豆freexxxx性91精品| 91麻豆文化传媒在线观看| 久久影音资源网| 日韩电影在线观看电影| 色综合久久综合网欧美综合网| 日韩欧美一区在线观看| 一区二区三区色| 懂色中文一区二区在线播放| 欧美一级在线视频| 一区二区免费看| av亚洲精华国产精华| 久久这里只有精品视频网| 视频一区欧美精品| 在线观看国产精品网站| 国产精品不卡在线观看| 国产精品一区二区91| 欧美一级搡bbbb搡bbbb| 亚洲一区二区三区四区的| www.亚洲色图| 国产女人水真多18毛片18精品视频| 免费看精品久久片| 欧美色图免费看| 亚洲综合小说图片| a亚洲天堂av| 国产精品久久久久婷婷二区次| 精久久久久久久久久久| 欧美一区二区视频免费观看| 亚洲精品免费播放| 日本久久电影网| 一区二区不卡在线播放| 色婷婷综合久久久久中文一区二区 | 91麻豆精品在线观看| 国产精品国产精品国产专区不蜜 | 色综合中文字幕国产 | 久久中文娱乐网| 精品一区二区三区视频| 日韩欧美电影在线| 麻豆精品在线视频| 日韩欧美高清一区| 久久成人av少妇免费| 日韩欧美一区二区视频| 蜜桃在线一区二区三区| 日韩精品一区国产麻豆| 精品在线亚洲视频| 精品久久久久一区| 国产老女人精品毛片久久| 国产片一区二区| 99久久亚洲一区二区三区青草| 1024亚洲合集| 欧美视频完全免费看| 天天色图综合网| 久久综合九色综合欧美亚洲| 国产综合色在线| 国产精品久久久久影院| 色婷婷综合久久久中文字幕| 亚洲成av人片一区二区三区| 91精品国产欧美一区二区| 精品一区二区免费看| 国产性做久久久久久| 91亚洲资源网| 亚洲电影视频在线| 精品乱人伦小说| 不卡一区二区中文字幕| 亚洲综合男人的天堂| 日韩欧美一级二级三级| 大尺度一区二区| 亚洲一区av在线| 精品捆绑美女sm三区| 9人人澡人人爽人人精品| 亚洲v中文字幕| 2019国产精品| 91久久国产综合久久| 久久国产精品72免费观看| 中文字幕在线播放不卡一区| 欧美精品在线观看一区二区| 国产麻豆成人精品|