[PATCH RFC ipsec-next 0/3] Virtual xfrm interfaces

2018-06-03 Thread Steffen Klassert
This patchset introduces new virtual xfrm interfaces. The design of virtual xfrm interfaces interfaces was discussed at the Linux IPsec workshop 2018. This patchset implements these interfaces as the IPsec userspace and kernel developers agreed. The purpose of these interfaces is to overcome the de

[PATCH RFC ipsec-next 2/3] xfrm: Add a new lookup key to match xfrm interfaces.

2018-06-03 Thread Steffen Klassert
This patch adds the xfrm interface id as a lookup key for xfrm states and policies. With this we can assign states and policies to virtual xfrm interfaces. Signed-off-by: Steffen Klassert Acked-by: Shannon Nelson Acked-by: Benedict Wong Tested-by: Benedict Wong Tested-by: Antony Antony Review

[PATCH RFC ipsec-next 1/3] flow: Extend flow informations with xfrm interface id.

2018-06-03 Thread Steffen Klassert
Add a new flowi_xfrm structure with informations needed to do a xfrm lookup. At the moment it keeps the informations about the xfrm interface id. Signed-off-by: Steffen Klassert Acked-by: Shannon Nelson Acked-by: Benedict Wong Tested-by: Benedict Wong Tested-by: Antony Antony Reviewed-by: Eya

[PATCH RFC ipsec-next 3/3] xfrm: Add virtual xfrm interfaces

2018-06-03 Thread Steffen Klassert
This patch adds support for virtual xfrm interfaces. Packets that are routed through such an interface are guaranteed to be IPsec transformed or dropped. Co-developed-by: Lorenzo Colitti Co-developed-by: Benedict Wong Signed-off-by: Lorenzo Colitti Signed-off-by: Benedict Wong Signed-off-by: S

答复: ANNOUNCE: Enhanced IP v1.4

2018-06-03 Thread PKU . 孙斌
On Sun, Jun 03, 2018 at 03:41:08PM -0700, Eric Dumazet wrote: > > > On 06/03/2018 01:37 PM, Tom Herbert wrote: > > > This is not an inconsequential mechanism that is being proposed. It's > > a modification to IP protocol that is intended to work on the > > Internet, but it looks like the draft h

Re: ANNOUNCE: Enhanced IP v1.4

2018-06-03 Thread Willy Tarreau
On Sun, Jun 03, 2018 at 03:41:08PM -0700, Eric Dumazet wrote: > > > On 06/03/2018 01:37 PM, Tom Herbert wrote: > > > This is not an inconsequential mechanism that is being proposed. It's > > a modification to IP protocol that is intended to work on the > > Internet, but it looks like the draft h

Re: [PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread Eric Dumazet
On 06/03/2018 07:46 AM, David Ahern wrote: > It was a mistake to set rt_last before checking err. So the > use-after-free exposed the semantic error. > SGTM, please send the formal patch then, thanks !

Re: [PATCH bpf-next] bpf: flowlabel in bpf_fib_lookup should be flowinfo

2018-06-03 Thread Alexei Starovoitov
On Sun, Jun 03, 2018 at 07:47:11PM -0600, David Ahern wrote: > On 6/3/18 7:41 PM, Alexei Starovoitov wrote: > > On Sun, Jun 03, 2018 at 08:15:19AM -0700, dsah...@kernel.org wrote: > >> From: David Ahern > >> > >> As Michal noted the flow struct takes both the flow label and priority. > >> Update t

Re: [PATCH bpf-next] bpf: flowlabel in bpf_fib_lookup should be flowinfo

2018-06-03 Thread David Ahern
On 6/3/18 7:41 PM, Alexei Starovoitov wrote: > On Sun, Jun 03, 2018 at 08:15:19AM -0700, dsah...@kernel.org wrote: >> From: David Ahern >> >> As Michal noted the flow struct takes both the flow label and priority. >> Update the bpf_fib_lookup API to note that it is flowinfo and not just >> the flo

Re: [PATCH bpf-next] bpf: flowlabel in bpf_fib_lookup should be flowinfo

2018-06-03 Thread Alexei Starovoitov
On Sun, Jun 03, 2018 at 08:15:19AM -0700, dsah...@kernel.org wrote: > From: David Ahern > > As Michal noted the flow struct takes both the flow label and priority. > Update the bpf_fib_lookup API to note that it is flowinfo and not just > the flow label. > > Cc: Michal Kubecek > Signed-off-by:

Re: [PATCH net-next v2 0/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Alexei Starovoitov
On Sun, Jun 03, 2018 at 03:59:40PM -0700, Yonghong Song wrote: > bpf has been used extensively for tracing. For example, bcc > contains an almost full set of bpf-based tools to trace kernel > and user functions/events. Most tracing tools are currently > either filtered based on pid or system-wide.

Re: [PATCH iproute2] iplink_vrf: Save device index from response for return code

2018-06-03 Thread Hangbin Liu
On Fri, Jun 01, 2018 at 08:50:16AM -0700, dsah...@kernel.org wrote: > From: David Ahern > > A recent commit changed rtnl_talk_* to return the response message in > allocated memory so callers need to free it. The change to name_is_vrf > did not save the device index which is pointing to a struct

Re: [PATCH v5 net] stmmac: 802.1ad tag stripping fix

2018-06-03 Thread Toshiaki Makita
On 2018/06/03 23:33, David Miller wrote: > From: Elad Nachman > Date: Wed, 30 May 2018 08:48:25 +0300 > >> static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb) >> { >> -struct ethhdr *ehdr; >> +struct vlan_ethhdr *veth; >> u16 vlanid; >> +__be16 vlan_proto; >

Re: [PATCH net-next] net: ipv6: Generate random IID for addresses on RAWIP devices

2018-06-03 Thread 吉藤英明
Hello, 2018-06-04 6:54 GMT+09:00 Subash Abhinov Kasiviswanathan : > RAWIP devices such as rmnet do not have a hardware address and > instead require the kernel to generate a random IID for the > temporary addresses. For permanent addresses, the device IID is > used along with prefix received. > >

Re: [PATCH net-next 0/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
On 6/3/18 1:00 PM, Alexei Starovoitov wrote: On Sun, Jun 03, 2018 at 12:36:51AM -0700, Yonghong Song wrote: bpf has been used extensively for tracing. For example, bcc contains an almost full set of bpf-based tools to trace kernel and user functions/events. Most tracing tools are currently ei

[PATCH net-next v2 3/3] tools/bpf: add a selftest for bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
Syscall name_to_handle_at() can be used to get cgroup id for a particular cgroup path in user space. The selftest got cgroup id from both user and kernel, and compare to ensure they are equal to each other. Acked-by: Alexei Starovoitov Signed-off-by: Yonghong Song --- tools/testing/selftests/bp

[PATCH net-next v2 0/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
bpf has been used extensively for tracing. For example, bcc contains an almost full set of bpf-based tools to trace kernel and user functions/events. Most tracing tools are currently either filtered based on pid or system-wide. Containers have been used quite extensively in industry and cgroup is

[PATCH net-next v2 1/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
bpf has been used extensively for tracing. For example, bcc contains an almost full set of bpf-based tools to trace kernel and user functions/events. Most tracing tools are currently either filtered based on pid or system-wide. Containers have been used quite extensively in industry and cgroup is

[PATCH net-next v2 2/3] tools/bpf: sync uapi bpf.h for bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
Sync kernel uapi/linux/bpf.h with tools uapi/linux/bpf.h. Also add the necessary helper define in bpf_helpers.h. Acked-by: Alexei Starovoitov Signed-off-by: Yonghong Song --- tools/include/uapi/linux/bpf.h| 8 +++- tools/testing/selftests/bpf/bpf_helpers.h | 2 ++ 2 files change

Re: ANNOUNCE: Enhanced IP v1.4

2018-06-03 Thread Eric Dumazet
On 06/03/2018 01:37 PM, Tom Herbert wrote: > This is not an inconsequential mechanism that is being proposed. It's > a modification to IP protocol that is intended to work on the > Internet, but it looks like the draft hasn't been updated for two > years and it is not adopted by any IETF workin

[PATCH net] net: qualcomm: rmnet: Fix use after free while sending command ack

2018-06-03 Thread Subash Abhinov Kasiviswanathan
When sending an ack to a command packet, the skb is still referenced after it is sent to the real device. Since the real device could free the skb, the device pointer would be invalid. Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation") Signed-off-by: Subash Ab

[PATCH net-next] net: ipv6: Generate random IID for addresses on RAWIP devices

2018-06-03 Thread Subash Abhinov Kasiviswanathan
RAWIP devices such as rmnet do not have a hardware address and instead require the kernel to generate a random IID for the temporary addresses. For permanent addresses, the device IID is used along with prefix received. Signed-off-by: Subash Abhinov Kasiviswanathan --- net/ipv6/addrconf.c | 17 +

Re: ANNOUNCE: Enhanced IP v1.4

2018-06-03 Thread Tom Herbert
On Sat, Jun 2, 2018 at 9:17 AM, Sam Patton wrote: > Hello Willy, netdev, > > Thank you for your reply and advice. I couldn't agree more with you > about containers and the exciting prospects there, > > as well as the ADSL scenario you mention. > > As far as application examples, check out this si

Re: [PATCH net-next 0/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Alexei Starovoitov
On Sun, Jun 03, 2018 at 12:36:51AM -0700, Yonghong Song wrote: > bpf has been used extensively for tracing. For example, bcc > contains an almost full set of bpf-based tools to trace kernel > and user functions/events. Most tracing tools are currently > either filtered based on pid or system-wide.

Re: [PATCH] net: do not allow changing SO_REUSEADDR/SO_REUSEPORT on bound sockets

2018-06-03 Thread Christoph Paasch
Hello, On Sun, Jun 3, 2018 at 10:47 AM, Maciej Żenczykowski wrote: > From: Maciej Żenczykowski > > It is not safe to do so because such sockets are already in the > hash tables and changing these options can result in invalidating > the tb->fastreuse(port) caching. > > This can have later far re

Re: [PATCH net-next 0/2] cls_flower: Various fixes

2018-06-03 Thread Jiri Pirko
Sun, Jun 03, 2018 at 08:33:25PM CEST, xiyou.wangc...@gmail.com wrote: >On Wed, May 30, 2018 at 1:17 AM, Paul Blakey wrote: >> Two of the fixes are for my multiple mask patch >> >> Paul Blakey (2): >> cls_flower: Fix missing free of rhashtable >> cls_flower: Fix comparing of old filter mask wit

Re: [PATCH net-next 0/2] cls_flower: Various fixes

2018-06-03 Thread Cong Wang
On Wed, May 30, 2018 at 1:17 AM, Paul Blakey wrote: > Two of the fixes are for my multiple mask patch > > Paul Blakey (2): > cls_flower: Fix missing free of rhashtable > cls_flower: Fix comparing of old filter mask with new filter Both are bug fixes and one-line fixes, so definitely should go

[PATCH] net: do not allow changing SO_REUSEADDR/SO_REUSEPORT on bound sockets

2018-06-03 Thread Maciej Żenczykowski
From: Maciej Żenczykowski It is not safe to do so because such sockets are already in the hash tables and changing these options can result in invalidating the tb->fastreuse(port) caching. This can have later far reaching consequences wrt. bind conflict checks which rely on these caches (for opt

[PATCH] net-tcp: extend tcp_tw_reuse sysctl to enable loopback only optimization

2018-06-03 Thread Maciej Żenczykowski
From: Maciej Żenczykowski This changes the /proc/sys/net/ipv4/tcp_tw_reuse from a boolean to an integer. It now takes the values 0, 1 and 2, where 0 and 1 behave as before, while 2 enables timewait socket reuse only for sockets that we can prove are loopback connections: ie. bound to 'lo' inte

Re: [PATCH bpf-next v3 05/11] bpf: avoid retpoline for lookup/update/delete calls on maps

2018-06-03 Thread Jesper Dangaard Brouer
On Sun, 3 Jun 2018 18:11:45 +0200 Daniel Borkmann wrote: > On 06/03/2018 08:56 AM, Jesper Dangaard Brouer wrote: > > On Sat, 2 Jun 2018 23:06:35 +0200 > > Daniel Borkmann wrote: > > > >> Before: > >> > >> # bpftool p d x i 1 > > > > Could this please be changed to: > > > > # bpftool p

[PATCH net-next v2] qed: Add srq core support for RoCE and iWARP

2018-06-03 Thread Yuval Bason
This patch adds support for configuring SRQ and provides the necessary APIs for rdma upper layer driver (qedr) to enable the SRQ feature. Signed-off-by: Michal Kalderon Signed-off-by: Ariel Elior Signed-off-by: Yuval Bason --- Changes from v1: - sparse warnings - replace memset

Re: [PATCH bpf-next v3 05/11] bpf: avoid retpoline for lookup/update/delete calls on maps

2018-06-03 Thread Daniel Borkmann
On 06/03/2018 08:56 AM, Jesper Dangaard Brouer wrote: > On Sat, 2 Jun 2018 23:06:35 +0200 > Daniel Borkmann wrote: > >> Before: >> >> # bpftool p d x i 1 > > Could this please be changed to: > > # bpftool prog dump xlated id 1 > > I requested this before, but you seem to have missed my fee

RE: [PATCH net-next] qed: Add srq core support for RoCE and iWARP

2018-06-03 Thread Bason, Yuval
From: Leon Romanovsky [mailto:l...@kernel.org] Sent: Thursday, May 31, 2018 8:33 PM > On Wed, May 30, 2018 at 04:11:37PM +0300, Yuval Bason wrote: > > This patch adds support for configuring SRQ and provides the necessary > > APIs for rdma upper layer driver (qedr) to enable the SRQ feature. > > >

Re: [PATCH net] vrf: check the original netdevice for generating redirect

2018-06-03 Thread David Ahern
On 5/31/18 10:05 PM, Stephen Suryaputra wrote: > Use the right device to determine if redirect should be sent especially > when using vrf. Same as well as when sending the redirect. > > Signed-off-by: Stephen Suryaputra > --- > net/ipv6/ip6_output.c | 3 ++- > net/ipv6/ndisc.c | 6 ++ >

Re: [bpf-next V2 PATCH 0/8] bpf/xdp: add flags argument to ndo_xdp_xmit and flag flush operation

2018-06-03 Thread Alexei Starovoitov
On Thu, May 31, 2018 at 10:59:42AM +0200, Jesper Dangaard Brouer wrote: > As I mentioned in merge commit 10f678683e4 ("Merge branch 'xdp_xmit-bulking'") > I plan to change the API for ndo_xdp_xmit once more, by adding a flags > argument, which is done in this patchset. > > I know it is late in the

[PATCH bpf-next] bpf: flowlabel in bpf_fib_lookup should be flowinfo

2018-06-03 Thread dsahern
From: David Ahern As Michal noted the flow struct takes both the flow label and priority. Update the bpf_fib_lookup API to note that it is flowinfo and not just the flow label. Cc: Michal Kubecek Signed-off-by: David Ahern --- include/uapi/linux/bpf.h | 2 +- net/core/filter.c | 2

Re: [PATCH bpf-next v3 00/11] Misc BPF improvements

2018-06-03 Thread Alexei Starovoitov
On Sat, Jun 02, 2018 at 11:06:30PM +0200, Daniel Borkmann wrote: > This set adds various patches I still had in my queue, first two > are test cases to provide coverage for the recent two fixes that > went to bpf tree, then a small improvement on the error message > for gpl helpers. Next, we expose

Re: [PATCH] vlan: use non-archaic spelling of failes

2018-06-03 Thread David Miller
From: Thadeu Lima de Souza Cascardo Date: Thu, 31 May 2018 09:20:20 -0300 > Signed-off-by: Thadeu Lima de Souza Cascardo Applied.

Re: [PATCH v2 net] mlx4_core: restore optimal ICM memory allocation

2018-06-03 Thread David Miller
From: Eric Dumazet Date: Thu, 31 May 2018 05:52:24 -0700 > Commit 1383cb8103bb ("mlx4_core: allocate ICM memory in page size chunks") > brought two regressions caught in our regression suite. > > The big one is an additional cost of 256 bytes of overhead per 4096 bytes, > or 6.25 % which is unac

Re: [PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread David Ahern
On 6/3/18 8:31 AM, Eric Dumazet wrote: > > > On 06/03/2018 07:01 AM, David Ahern wrote: >> On 6/3/18 7:35 AM, Eric Dumazet wrote: >>> diff --git a/net/ipv6/route.c b/net/ipv6/route.c >>> index >>> f4d61736c41abe8cd7f439c4a37100e90c1eacca..830eefdbdb6734eb81ea0322fb6077ee20be1889 >>> 100644 >>>

Re: [PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread David Ahern
On 6/3/18 8:01 AM, David Ahern wrote: > Is there a reproducer for the syzbot case? One reproducer is to insert a route and then add a multipath route that has a duplicate nexthop.e.g,: ip -6 ro add vrf red 2001:db8:101::/64 nexthop via 2001:db8:1::2 ip -6 ro append vrf red 2001:db8:101::/64 next

Re: [PATCH net-next] net/smc: fix error return code in smc_setsockopt()

2018-06-03 Thread David Miller
From: Wei Yongjun Date: Thu, 31 May 2018 02:31:22 + > Fix to return error code -EINVAL instead of 0 if optlen is invalid. > > Fixes: 01d2f7e2cdd3 ("net/smc: sockopts TCP_NODELAY and TCP_CORK") > Signed-off-by: Wei Yongjun Although the TCP code should be checking this in the previous lines,

Re: [PATCH net-next] net/mlx5: Make function mlx5_fpga_tls_send_teardown_cmd() static

2018-06-03 Thread David Miller
From: Wei Yongjun Date: Thu, 31 May 2018 02:31:12 + > Fixes the following sparse warning: > > drivers/net/ethernet/mellanox/mlx5/core/fpga/tls.c:199:6: warning: > symbol 'mlx5_fpga_tls_send_teardown_cmd' was not declared. Should it be > static? > > Signed-off-by: Wei Yongjun Applied.

Re: [PATCH net-next] hv_netvsc: fix error return code in netvsc_probe()

2018-06-03 Thread David Miller
From: Wei Yongjun Date: Thu, 31 May 2018 02:04:43 + > Fix to return a negative error code from the failover register fail > error handling case instead of 0, as done elsewhere in this function. > > Fixes: 1ff78076d8dd ("netvsc: refactor notifier/event handling code to use > the failover fra

Re: [PATCH net] vrf: check the original netdevice for generating redirect

2018-06-03 Thread David Miller
From: Stephen Suryaputra Date: Fri, 1 Jun 2018 00:05:21 -0400 > Use the right device to determine if redirect should be sent especially > when using vrf. Same as well as when sending the redirect. > > Signed-off-by: Stephen Suryaputra David A., please review.

Re: [PATCH net-next] net: phy: consider PHY_IGNORE_INTERRUPT in state machine PHY_NOLINK handling

2018-06-03 Thread David Miller
From: Heiner Kallweit Date: Wed, 30 May 2018 22:13:20 +0200 > We can bail out immediately also in case of PHY_IGNORE_INTERRUPT because > phy_mac_interupt() informs us once the link is up. > > Signed-off-by: Heiner Kallweit Applied, thanks.

Re: [PATCH v5 net] stmmac: 802.1ad tag stripping fix

2018-06-03 Thread David Miller
From: Elad Nachman Date: Wed, 30 May 2018 08:48:25 +0300 > static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb) > { > - struct ethhdr *ehdr; > + struct vlan_ethhdr *veth; > u16 vlanid; > + __be16 vlan_proto; Please order local variables from longest to shor

Re: [PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread Eric Dumazet
On 06/03/2018 07:01 AM, David Ahern wrote: > On 6/3/18 7:35 AM, Eric Dumazet wrote: >> diff --git a/net/ipv6/route.c b/net/ipv6/route.c >> index >> f4d61736c41abe8cd7f439c4a37100e90c1eacca..830eefdbdb6734eb81ea0322fb6077ee20be1889 >> 100644 >> --- a/net/ipv6/route.c >> +++ b/net/ipv6/route.c >

Re: [PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread David Ahern
On 6/3/18 7:35 AM, Eric Dumazet wrote: > diff --git a/net/ipv6/route.c b/net/ipv6/route.c > index > f4d61736c41abe8cd7f439c4a37100e90c1eacca..830eefdbdb6734eb81ea0322fb6077ee20be1889 > 100644 > --- a/net/ipv6/route.c > +++ b/net/ipv6/route.c > @@ -4263,7 +4263,9 @@ static int ip6_route_multipath_

[PATCH net] net: ipv6: prevent use after free in ip6_route_mpath_notify()

2018-06-03 Thread Eric Dumazet
syzbot reported a use-after-free [1] Issue here is that rt_last might have been freed already. We need to grab a refcount on it to prevent this. [1] BUG: KASAN: use-after-free in ip6_route_mpath_notify+0xe9/0x100 net/ipv6/route.c:4180 Read of size 4 at addr 8801bf789cf0 by task syz-executor7

[PATCH net-next 2/3] tools/bpf: sync uapi bpf.h for bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
Sync kernel uapi/linux/bpf.h with tools uapi/linux/bpf.h. Also add the necessary helper define in bpf_helpers.h. Signed-off-by: Yonghong Song --- tools/include/uapi/linux/bpf.h| 9 - tools/testing/selftests/bpf/bpf_helpers.h | 2 ++ 2 files changed, 10 insertions(+), 1 deleti

[PATCH net-next 0/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
bpf has been used extensively for tracing. For example, bcc contains an almost full set of bpf-based tools to trace kernel and user functions/events. Most tracing tools are currently either filtered based on pid or system-wide. Containers have been used quite extensively in industry and cgroup is

[PATCH net-next 3/3] tools/bpf: add a selftest for bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
Syscall name_to_handle_at() can be used to get cgroup id for a particular cgroup path in user space. The selftest got cgroup id from both user and kernel, and compare to ensure they are equal to each other. Signed-off-by: Yonghong Song --- tools/testing/selftests/bpf/.gitignore | 1 +

[PATCH net-next 1/3] bpf: implement bpf_get_current_cgroup_id() helper

2018-06-03 Thread Yonghong Song
bpf has been used extensively for tracing. For example, bcc contains an almost full set of bpf-based tools to trace kernel and user functions/events. Most tracing tools are currently either filtered based on pid or system-wide. Containers have been used quite extensively in industry and cgroup is

[PATCH net-next V2 2/2] cls_flower: Fix comparing of old filter mask with new filter

2018-06-03 Thread Paul Blakey
We incorrectly compare the mask and the result is that we can't modify an already existing rule. Fix that by comparing correctly. Fixes: 05cd271fd61a ("cls_flower: Support multiple masks per priority") Reported-by: Vlad Buslov Reviewed-by: Roi Dayan Reviewed-by: Jiri Pirko Signed-off-by: Paul

[PATCH net-next V2 1/2] cls_flower: Fix missing free of rhashtable

2018-06-03 Thread Paul Blakey
When destroying the instance, destroy the head rhashtable. Fixes: 05cd271fd61a ("cls_flower: Support multiple masks per priority") Reported-by: Vlad Buslov Reviewed-by: Roi Dayan Reviewed-by: Jiri Pirko Signed-off-by: Paul Blakey --- Changelog: v0 -> v2: rebased. net/sched/cls_flower.c | 2