parent
2c152254ba
commit
961b7257d7
@ -0,0 +1,130 @@
|
|||||||
|
From fab3da1fc7a88dfbe2275fa0eccb798444eae385 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Flavio Leitner <fbl@redhat.com>
|
||||||
|
Date: Tue, 1 Apr 2014 18:05:20 -0300
|
||||||
|
Subject: [PATCH] bridge: don't bring up internal ports by default.
|
||||||
|
|
||||||
|
It should be an administrator task to bring up devices as they
|
||||||
|
are configured properly.
|
||||||
|
|
||||||
|
Currently, Fedora is deleting the bridges when the interface is
|
||||||
|
brought down. Therefore, there is no bridge on the next boot and
|
||||||
|
the initscripts can apply the networking configuration properly
|
||||||
|
for a new bridge.
|
||||||
|
|
||||||
|
However, if the system didn't execute ifdown for some reason, the
|
||||||
|
bridge is left in the ovsdb and since internal ports are brought
|
||||||
|
up by default, there is no way for initscripts to known if the
|
||||||
|
adminitrator has already configured it or not.
|
||||||
|
|
||||||
|
This patch reverts commit bef071a5fdf8e2dd87677b04b3cf7a8f5094edcb
|
||||||
|
(bridge: Always "up" internal devices.).
|
||||||
|
|
||||||
|
Signed-off-by: Flavio Leitner <fbl@redhat.com>
|
||||||
|
Signed-off-by: Ben Pfaff <blp@nicira.com>
|
||||||
|
---
|
||||||
|
NEWS | 5 +++++
|
||||||
|
tests/ofproto-dpif.at | 4 ++--
|
||||||
|
tests/ofproto.at | 16 ++++++++--------
|
||||||
|
vswitchd/bridge.c | 3 +--
|
||||||
|
4 files changed, 16 insertions(+), 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/NEWS b/NEWS
|
||||||
|
index 839b4dd..91d9194 100644
|
||||||
|
--- a/NEWS
|
||||||
|
+++ b/NEWS
|
||||||
|
@@ -1,3 +1,8 @@
|
||||||
|
+Backported from upstream:
|
||||||
|
+ - Internal ports are no longer brought up by default, because it
|
||||||
|
+ should be an administrator task to bring up devices as they are
|
||||||
|
+ configured properly.
|
||||||
|
+
|
||||||
|
v2.1.0 - 19 Mar 2014
|
||||||
|
---------------------
|
||||||
|
- Address prefix tracking support for flow tables. New columns
|
||||||
|
diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at
|
||||||
|
index 1a58da6..fbd40ff 100644
|
||||||
|
--- a/tests/ofproto-dpif.at
|
||||||
|
+++ b/tests/ofproto-dpif.at
|
||||||
|
@@ -1937,7 +1937,7 @@ IFCOUNTERS
|
||||||
|
type=6
|
||||||
|
ifspeed=100000000
|
||||||
|
direction=0
|
||||||
|
- status=3
|
||||||
|
+ status=0
|
||||||
|
in_octets=0
|
||||||
|
in_unicasts=0
|
||||||
|
in_multicasts=0
|
||||||
|
@@ -2006,7 +2006,7 @@ IFCOUNTERS
|
||||||
|
type=6
|
||||||
|
ifspeed=100000000
|
||||||
|
direction=0
|
||||||
|
- status=3
|
||||||
|
+ status=0
|
||||||
|
in_octets=0
|
||||||
|
in_unicasts=0
|
||||||
|
in_multicasts=0
|
||||||
|
diff --git a/tests/ofproto.at b/tests/ofproto.at
|
||||||
|
index f6a62cd..dd56b39 100644
|
||||||
|
--- a/tests/ofproto.at
|
||||||
|
+++ b/tests/ofproto.at
|
||||||
|
@@ -38,8 +38,8 @@ n_tables:254, n_buffers:256
|
||||||
|
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
|
||||||
|
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
|
||||||
|
LOCAL(br0): addr:aa:55:aa:55:00:00
|
||||||
|
- config: 0
|
||||||
|
- state: 0
|
||||||
|
+ config: PORT_DOWN
|
||||||
|
+ state: LINK_DOWN
|
||||||
|
speed: 0 Mbps now, 0 Mbps max
|
||||||
|
OFPT_GET_CONFIG_REPLY: frags=normal miss_send_len=0
|
||||||
|
])
|
||||||
|
@@ -68,8 +68,8 @@ actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_N
|
||||||
|
state: LINK_DOWN
|
||||||
|
speed: 0 Mbps now, 0 Mbps max
|
||||||
|
LOCAL(br0): addr:aa:55:aa:55:00:0x
|
||||||
|
- config: 0
|
||||||
|
- state: 0
|
||||||
|
+ config: PORT_DOWN
|
||||||
|
+ state: LINK_DOWN
|
||||||
|
speed: 0 Mbps now, 0 Mbps max
|
||||||
|
OFPT_GET_CONFIG_REPLY: frags=normal miss_send_len=0
|
||||||
|
])
|
||||||
|
@@ -109,8 +109,8 @@ AT_CHECK([ovs-ofctl -vwarn dump-ports-desc br0], [0], [stdout])
|
||||||
|
AT_CHECK([STRIP_XIDS stdout], [0], [dnl
|
||||||
|
OFPST_PORT_DESC reply:
|
||||||
|
LOCAL(br0): addr:aa:55:aa:55:00:00
|
||||||
|
- config: 0
|
||||||
|
- state: 0
|
||||||
|
+ config: PORT_DOWN
|
||||||
|
+ state: LINK_DOWN
|
||||||
|
speed: 0 Mbps now, 0 Mbps max
|
||||||
|
])
|
||||||
|
OVS_VSWITCHD_STOP
|
||||||
|
@@ -124,8 +124,8 @@ AT_CHECK([ovs-ofctl -O OpenFlow12 -vwarn dump-ports-desc br0], [0], [stdout])
|
||||||
|
AT_CHECK([STRIP_XIDS stdout], [0], [dnl
|
||||||
|
OFPST_PORT_DESC reply (OF1.2):
|
||||||
|
LOCAL(br0): addr:aa:55:aa:55:00:00
|
||||||
|
- config: 0
|
||||||
|
- state: 0
|
||||||
|
+ config: PORT_DOWN
|
||||||
|
+ state: LINK_DOWN
|
||||||
|
speed: 0 Mbps now, 0 Mbps max
|
||||||
|
])
|
||||||
|
OVS_VSWITCHD_STOP
|
||||||
|
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
|
||||||
|
index b72f0d8..5b81d62 100644
|
||||||
|
--- a/vswitchd/bridge.c
|
||||||
|
+++ b/vswitchd/bridge.c
|
||||||
|
@@ -1448,8 +1448,7 @@ iface_do_create(const struct bridge *br,
|
||||||
|
VLOG_INFO("bridge %s: added interface %s on port %d",
|
||||||
|
br->name, iface_cfg->name, *ofp_portp);
|
||||||
|
|
||||||
|
- if ((port_cfg->vlan_mode && !strcmp(port_cfg->vlan_mode, "splinter"))
|
||||||
|
- || iface_is_internal(iface_cfg, br->cfg)) {
|
||||||
|
+ if (port_cfg->vlan_mode && !strcmp(port_cfg->vlan_mode, "splinter")) {
|
||||||
|
netdev_turn_flags_on(netdev, NETDEV_UP, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.5.3
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
diff --git a/rhel/etc_sysconfig_network-scripts_ifdown-ovs b/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
|
||||||
index 32fddb5..daa5786 100755
|
|
||||||
--- a/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
|
||||||
+++ b/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
|
||||||
@@ -51,7 +51,7 @@ case "$TYPE" in
|
|
||||||
retval=$?
|
|
||||||
ovs-vsctl -t ${TIMEOUT} -- --if-exists del-br "$DEVICE"
|
|
||||||
;;
|
|
||||||
- OVSPort|OVSIntPort|OVSBond)
|
|
||||||
+ OVSPort|OVSIntPort|OVSBond|OVSTunnel)
|
|
||||||
${OTHERSCRIPT} ${CONFIG} $2
|
|
||||||
retval=$?
|
|
||||||
ovs-vsctl -t ${TIMEOUT} -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE"
|
|
||||||
diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs b/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
|
||||||
index 3c6b557..3f31c30 100755
|
|
||||||
--- a/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
|
||||||
+++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
|
||||||
@@ -126,6 +126,11 @@ case "$TYPE" in
|
|
||||||
${OTHERSCRIPT} ${CONFIG} ${2}
|
|
||||||
OVSINTF=${DEVICE} /sbin/ifup "$OVS_BRIDGE"
|
|
||||||
;;
|
|
||||||
+ OVSTunnel)
|
|
||||||
+ ifup_ovs_bridge
|
|
||||||
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=$OVS_TUNNEL_TYPE $OVS_TUNNEL_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
|
|
||||||
+ ${OTHERSCRIPT} ${CONFIG} ${2}
|
|
||||||
+ ;;
|
|
||||||
*)
|
|
||||||
echo $"Invalid OVS interface type $TYPE"
|
|
||||||
exit 1
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From 691e47554dd03dd6492e00bab5bd6d215f5cbd4f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Flavio Leitner <fbl@redhat.com>
|
||||||
|
Date: Thu, 27 Feb 2014 09:16:34 -0300
|
||||||
|
Subject: [PATCH] ovs-lib: allow non-root users to check service status
|
||||||
|
|
||||||
|
It tries to log the status operation, so although non-root
|
||||||
|
users can see the current status, the lack of permission
|
||||||
|
to write to the log results in an error message.
|
||||||
|
|
||||||
|
This changes to log only if the user has the permission to
|
||||||
|
write to the log file.
|
||||||
|
|
||||||
|
Signed-off-by: Flavio Leitner <fbl@redhat.com>
|
||||||
|
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
|
||||||
|
---
|
||||||
|
utilities/ovs-lib.in | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in
|
||||||
|
index 029ed3b..48d0c36 100644
|
||||||
|
--- a/utilities/ovs-lib.in
|
||||||
|
+++ b/utilities/ovs-lib.in
|
||||||
|
@@ -54,7 +54,11 @@ ovs_ctl () {
|
||||||
|
# of ovs-ctl. It is also useful to document the o/p in ovs-ctl.log.
|
||||||
|
display=`"${datadir}/scripts/ovs-ctl" "$@" 2>&1`
|
||||||
|
rc=$?
|
||||||
|
- echo "${display}" | tee -a "${logdir}/ovs-ctl.log"
|
||||||
|
+ if test -w "${logdir}/ovs-ctl.log"; then
|
||||||
|
+ echo "${display}" | tee -a "${logdir}/ovs-ctl.log"
|
||||||
|
+ else
|
||||||
|
+ echo "${display}"
|
||||||
|
+ fi
|
||||||
|
return ${rc}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
--
|
||||||
|
1.8.5.3
|
||||||
|
|
@ -0,0 +1,114 @@
|
|||||||
|
From e2bcc8ef49f5e51f48983b87ab1010f0f9ab1454 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Jason=20K=C3=B6lker?= <jason@koelker.net>
|
||||||
|
Date: Mon, 31 Mar 2014 23:34:14 +0000
|
||||||
|
Subject: [PATCH] rhel: Add Patch Port support to initscripts
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Allows setting up type=patch ports through sysconfig ifcfg-* files.
|
||||||
|
|
||||||
|
Signed-off-by: Jason Kölker <jason@koelker.net>
|
||||||
|
Signed-off-by: Gurucharan Shetty <gshetty@nicira.com>
|
||||||
|
Acked-by: Flavio Leitner <fbl@redhat.com>
|
||||||
|
---
|
||||||
|
AUTHORS | 1 +
|
||||||
|
rhel/README.RHEL | 25 +++++++++++++++++++++++++
|
||||||
|
rhel/etc_sysconfig_network-scripts_ifdown-ovs | 3 +++
|
||||||
|
rhel/etc_sysconfig_network-scripts_ifup-ovs | 4 ++++
|
||||||
|
4 files changed, 33 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/AUTHORS b/AUTHORS
|
||||||
|
index 977753b..c5402cf 100644
|
||||||
|
--- a/AUTHORS
|
||||||
|
+++ b/AUTHORS
|
||||||
|
@@ -57,6 +57,7 @@ Isaku Yamahata yamahata@valinux.co.jp
|
||||||
|
James P. roampune@gmail.com
|
||||||
|
James Page james.page@ubuntu.com
|
||||||
|
Jarno Rajahalme jrajahalme@nicira.com
|
||||||
|
+Jason Kölker jason@koelker.net
|
||||||
|
Jean Tourrilhes jt@hpl.hp.com
|
||||||
|
Jeremy Stribling strib@nicira.com
|
||||||
|
Jesse Gross jesse@nicira.com
|
||||||
|
diff --git a/rhel/README.RHEL b/rhel/README.RHEL
|
||||||
|
index cb6ab88..2620674 100644
|
||||||
|
--- a/rhel/README.RHEL
|
||||||
|
+++ b/rhel/README.RHEL
|
||||||
|
@@ -25,6 +25,8 @@ assignments. The following OVS-specific variable names are supported:
|
||||||
|
|
||||||
|
* "OVSTunnel", if <name> is an OVS tunnel.
|
||||||
|
|
||||||
|
+ * "OVSPatchPort", if <name> is a patch port
|
||||||
|
+
|
||||||
|
- OVS_BRIDGE: If TYPE is anything other than "OVSBridge", set to
|
||||||
|
the name of the OVS bridge to which the port should be attached.
|
||||||
|
|
||||||
|
@@ -47,6 +49,9 @@ assignments. The following OVS-specific variable names are supported:
|
||||||
|
- OVS_TUNNEL_OPTIONS: For "OVSTunnel" interfaces, this field should be
|
||||||
|
used to specify the tunnel options like remote_ip, key, etc.
|
||||||
|
|
||||||
|
+ - OVS_PATCH_PEER: For "OVSPatchPort" devices, this field specifies
|
||||||
|
+ the patch's peer on the other bridge.
|
||||||
|
+
|
||||||
|
Note
|
||||||
|
----
|
||||||
|
|
||||||
|
@@ -182,6 +187,26 @@ OVS_BRIDGE=ovsbridge0
|
||||||
|
OVS_TUNNEL_TYPE=gre
|
||||||
|
OVS_TUNNEL_OPTIONS="options:remote_ip=A.B.C.D"
|
||||||
|
|
||||||
|
+
|
||||||
|
+Patch Ports:
|
||||||
|
+
|
||||||
|
+==> ifcfg-patch-ovs-0 <==
|
||||||
|
+DEVICE=patch-ovs-0
|
||||||
|
+ONBOOT=yes
|
||||||
|
+DEVICETYPE=ovs
|
||||||
|
+TYPE=OVSPatchPort
|
||||||
|
+OVS_BRIDGE=ovsbridge0
|
||||||
|
+OVS_PATCH_PEER=patch-ovs-1
|
||||||
|
+
|
||||||
|
+==> ifcfg-patch-ovs-1 <==
|
||||||
|
+DEVICE=patch-ovs-1
|
||||||
|
+ONBOOT=yes
|
||||||
|
+DEVICETYPE=ovs
|
||||||
|
+TYPE=OVSPatchPort
|
||||||
|
+OVS_BRIDGE=ovsbridge1
|
||||||
|
+OVS_PATCH_PEER=patch-ovs-0
|
||||||
|
+
|
||||||
|
+
|
||||||
|
Reporting Bugs
|
||||||
|
--------------
|
||||||
|
|
||||||
|
diff --git a/rhel/etc_sysconfig_network-scripts_ifdown-ovs b/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
||||||
|
index 8e768c8..1371a30 100755
|
||||||
|
--- a/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
||||||
|
+++ b/rhel/etc_sysconfig_network-scripts_ifdown-ovs
|
||||||
|
@@ -47,6 +47,9 @@ case "$TYPE" in
|
||||||
|
retval=$?
|
||||||
|
ovs-vsctl -t ${TIMEOUT} -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE"
|
||||||
|
;;
|
||||||
|
+ OVSPatchPort)
|
||||||
|
+ ovs-vsctl -t ${TIMEOUT} -- --if-exists del-port "$OVS_BRIDGE" "$DEVICE"
|
||||||
|
+ ;;
|
||||||
|
*)
|
||||||
|
echo $"Invalid OVS interface type $TYPE"
|
||||||
|
exit 1
|
||||||
|
diff --git a/rhel/etc_sysconfig_network-scripts_ifup-ovs b/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
||||||
|
index a50c72f..f5641d2 100755
|
||||||
|
--- a/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
||||||
|
+++ b/rhel/etc_sysconfig_network-scripts_ifup-ovs
|
||||||
|
@@ -127,6 +127,10 @@ case "$TYPE" in
|
||||||
|
ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=$OVS_TUNNEL_TYPE $OVS_TUNNEL_OPTIONS ${OVS_EXTRA+-- $OVS_EXTRA}
|
||||||
|
${OTHERSCRIPT} ${CONFIG} ${2}
|
||||||
|
;;
|
||||||
|
+ OVSPatchPort)
|
||||||
|
+ ifup_ovs_bridge
|
||||||
|
+ ovs-vsctl -t ${TIMEOUT} -- --may-exist add-port "$OVS_BRIDGE" "$DEVICE" $OVS_OPTIONS -- set Interface "$DEVICE" type=patch options:peer="${OVS_PATCH_PEER}" ${OVS_EXTRA+-- $OVS_EXTRA}
|
||||||
|
+ ;;
|
||||||
|
*)
|
||||||
|
echo $"Invalid OVS interface type $TYPE"
|
||||||
|
exit 1
|
||||||
|
--
|
||||||
|
1.8.5.3
|
||||||
|
|
@ -1,62 +0,0 @@
|
|||||||
From b86fec9baa9c2ee03b28cfc8dad95c41bf9acaad Mon Sep 17 00:00:00 2001
|
|
||||||
From: Flavio Leitner <fbl@redhat.com>
|
|
||||||
Date: Wed, 2 Oct 2013 02:40:09 -0300
|
|
||||||
Subject: [PATCH] util: use gcc builtins to better check array sizes
|
|
||||||
|
|
||||||
GCC provides two useful builtin functions that can help
|
|
||||||
to improve array size checking during compilation.
|
|
||||||
|
|
||||||
This patch contains no functional changes, but it makes
|
|
||||||
it easier to detect mistakes.
|
|
||||||
|
|
||||||
Signed-off-by: Flavio Leitner <fbl@redhat.com>
|
|
||||||
Signed-off-by: Ben Pfaff <blp@nicira.com>
|
|
||||||
---
|
|
||||||
AUTHORS | 1 +
|
|
||||||
lib/util.h | 17 ++++++++++++++++-
|
|
||||||
2 files changed, 17 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/AUTHORS b/AUTHORS
|
|
||||||
index af34bfe..7a919a2 100644
|
|
||||||
--- a/AUTHORS
|
|
||||||
+++ b/AUTHORS
|
|
||||||
@@ -32,6 +32,7 @@ Duffie Cooley dcooley@nicira.com
|
|
||||||
Ed Maste emaste at freebsd.org
|
|
||||||
Edward Tomasz Napierała trasz@freebsd.org
|
|
||||||
Ethan Jackson ethan@nicira.com
|
|
||||||
+Flavio Leitner fbl@redhat.com
|
|
||||||
FUJITA Tomonori fujita.tomonori@lab.ntt.co.jp
|
|
||||||
Gaetano Catalli gaetano.catalli@gmail.com
|
|
||||||
Giuseppe Lettieri g.lettieri@iet.unipi.it
|
|
||||||
diff --git a/lib/util.h b/lib/util.h
|
|
||||||
index 0db41be..a899065 100644
|
|
||||||
--- a/lib/util.h
|
|
||||||
+++ b/lib/util.h
|
|
||||||
@@ -87,8 +87,23 @@ void ovs_assert_failure(const char *, const char *, const char *) NO_RETURN;
|
|
||||||
|
|
||||||
extern const char *program_name;
|
|
||||||
|
|
||||||
+#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
|
|
||||||
+#ifdef __GNUC__
|
|
||||||
+/* return 0 for array types, 1 otherwise */
|
|
||||||
+#define __ARRAY_CHECK(ARRAY) \
|
|
||||||
+ !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
|
|
||||||
+
|
|
||||||
+/* compile-time fail if not array */
|
|
||||||
+#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
|
|
||||||
+#define __ARRAY_SIZE(ARRAY) \
|
|
||||||
+ __builtin_choose_expr(__ARRAY_CHECK(ARRAY), \
|
|
||||||
+ __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
|
|
||||||
+#else
|
|
||||||
+#define __ARRAY_SIZE(ARRAY) __ARRAY_SIZE_NOCHECK(ARRAY)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Returns the number of elements in ARRAY. */
|
|
||||||
-#define ARRAY_SIZE(ARRAY) (sizeof ARRAY / sizeof *ARRAY)
|
|
||||||
+#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
|
|
||||||
|
|
||||||
/* Returns X / Y, rounding up. X must be nonnegative to round correctly. */
|
|
||||||
#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
|
|
||||||
--
|
|
||||||
1.8.4.2
|
|
||||||
|
|
Loading…
Reference in new issue