[linux-merge]linux integration; annotated tag, v4.9.316, created. v4.9.316
by postmaster@open-mesh.org
The annotated tag, v4.9.316 has been created
at 15bf0b39ce1b1a877e3d09ba108236c491da1d2a (tag)
tagging 95302ce6d8a08e88b7562238a8018820631325b6 (commit)
replaces v4.9.313
tagged by Greg Kroah-Hartman
on Wed May 25 08:39:56 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 4.9.316 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKNzzwACgkQONu9yGCS
aT7PfA/9EISc2Db9cCrIiFtv+xWnPmZc/njMaXZe7ZgDUTKO6G9ZEnfAGu9FM9Mb
CRtIiKHuAyYXZOSyz8OBitDYrqfCnkd+JLTtBr/5G9CO7QpWobFe4rRQfH2KdbK1
IC5ihUwhhZE33Pu7O5THwfY/WqJMrQgxAT52ik0w8otU01eOd8TCRi95PchVu7KJ
JcZinu31wovNoZvDEG/C58jfvRyRCD4tAXpNZvJwRmAl3P/6xINjvtxSq1obyHfg
WtayOCzjrps1FF1oq87Ybs15cxD6sx1SCAkrHIfhrLcZwNIuN0p7TQd/sbwXihVc
zPUpzTJIFTkDTjmO0G/6bfTMBWL8DV8sz/BZ/sWhZsJihBlokWeAHMTO8B51Gja0
g+IOCXFCJIM6XMIzC/4/yT+CoQ1+P/Fg5f7tBkbG0LJ2wZ+pQFFLyUGKc7l+DeKy
TQKgZ3A5v8ZZbkOt53wqJI/dWYYNQlVsh7y9jYHmPU5uqranQ7k52ljK8JKZgJav
mG2B4O3YOF8dvvBG4YHk0lQOTsTV9IQv9PR/CKI0YXFBYhZtZYxqz238kKm/1Ly4
5fY9AAHD1ZbQ+eDZSXpof2EVwwDJklv+6rwUl13zPSeUNOnR7XHT2UgTMoU+yol7
bkjd/H3azwAy44HHQr+MapYRYLGgFlUYeN1zs3ZcpWMJ6nVuAZ0=
=hnuQ
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v4.14.281, created. v4.14.281
by postmaster@open-mesh.org
The annotated tag, v4.14.281 has been created
at d235c5497a0a29b0751ff5e5d641026bc3538081 (tag)
tagging 501eec4f9e138b958fc7438e7a745c0d6a7c68b3 (commit)
replaces v4.14.278
tagged by Greg Kroah-Hartman
on Wed May 25 08:41:26 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 4.14.281 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKNz5cACgkQONu9yGCS
aT6tNg/+MwE8Ip7r+xZZjjokRFVE7OHKrn6QpwnXMfbPp0emrboTQJjv/8cZqX/A
hsZ4x6Zu9xrYQxIkLZ+VMQYGzcULbN2AtgZIyIlixTU+zibixO/+Wv2U1bNzILUc
lByFcyKx8kNSk8DVSRSqsvIsr/HZcZKoLbmSSvftUXOwKts7VFCBXk51+64OSRZe
iCJLM3Kcx6aHnIf9uEPM5Eim+Ks5VIGt1YjKrV96gwkx/pHsWMFJxi4mLgfcmC9Y
4S4ULvjU6YtxibVPuk8pvh+tSf6TvmgyL5Xq6sFFBhZ3KYRM9EzxEKSLIiEo7Saf
IU+6HeAKgmKwlE2c1QT+RGXUXzKxMsRHouYXFDqYV7Yd0gcNG5RenRaJs4jgwMoJ
svGsrCsbcy2jeIicP9FT7Lhp4behVE+ZDAOI4nSEGcifp7Z752agTqptDfClbn/N
8NDtGiVc8v3oCsPfEq6IQYRVMhdVMCpJPsZnntRfKKDxksaObCqRkvTqsdLF/2t2
CqUnPm2jbIgid7XkrRQFwt/pZnho1aIMsTGnT6hyqrKzDWZeYuO2p+Fbg8DqRtTE
wNoPdXRHI9FlybBtzsBG+PGbYpk0TqfMAcPDc6/x6QuVRmNY4I6AOmx+L0jqZ7gM
jwTVC7zKr0gUui3RMYXsuSc66OSzAO0PLDF7OqeB8YkKG7VDzDc=
=0A2Z
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v4.19.245, created. v4.19.245
by postmaster@open-mesh.org
The annotated tag, v4.19.245 has been created
at 9fce3f780b600f245755eab4b230a65f2d3316c7 (tag)
tagging 06d93c33da2cc9c3ca79f5ba757e08306455d9d6 (commit)
replaces v4.19.242
tagged by Greg Kroah-Hartman
on Wed May 25 09:10:46 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 4.19.245 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKN1nYACgkQONu9yGCS
aT7ImA/+Kqs+yX43tJf+fmyBe0yPW3GLoyeSKFpcBbKdgX9KOuN6lLP1ETMES0/+
9P+aCMCbjNhYb3TlyhYphmfrjxXDWC9cSftl15c2guaLgHwib9UNxDgHt80WnwwI
v1ciluRwHJmoUv2T3yjc8uusM2XEc3rASMt9FyPecYncAWRdzzNPHgwuQoC6kWIq
wGLmH6qYFUntybe5A5rCFPbem9qBVa+M9PuqX+ZJpoKFEO6cufKeam0IV0YWflHc
LxsuP+vDQA6pmVQyhgIj0XLLRYGiO6vYvXozcpCLbDbenEWk8OEgkC3TTPCGhvs7
PyYUfdAaywX9cD9wUUh2SjpTh85yAMzor5jHzsa0JqL7WlkjCmPGjoTgnlen8ztT
MUpCSY6v0/3Byara2CFfmC9DQsdBJi1g2o/Oetrq836WT5kt+wzVOPH428bJIjQm
DxHnhh+/T+MyVYcHUFl34obzYZycrxIgn6oElfmx9APrGbh03phlDgA1l+ZVcJkJ
K7nr7Nj0yVZ5FUhv9DxChaJpXJkd+73yw6umIYwcFO/Lc8d9mncK6edjsckwt2rH
ZAZb2RatsWZFUoqyCU2sKgn/doybLElQTX2CJk2YsFO9MCvP4/jiFk43iRgDpSP2
ffzTSh3TLEErztagwZ9frov0WA/KEh3hYdYrx62ELhnauvn0mEU=
=w6rx
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v5.4.196, created. v5.4.196
by postmaster@open-mesh.org
The annotated tag, v5.4.196 has been created
at b2e9eba2b178997956647dabeb8e9764a5490789 (tag)
tagging 04b092e4a01a3488e762897e2d29f85eda2c6a60 (commit)
replaces v5.4.193
tagged by Greg Kroah-Hartman
on Wed May 25 09:14:43 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 5.4.196 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKN12MACgkQONu9yGCS
aT4Uvg/8DPgL4dM+jKZ4R16cbJU1rpvY0pJEcYsepqLFXdHDSLBA04eakCXO8k+x
Ksy0kXvZuVGRRl25OuTGoTPvsmdx/D0R+XNSEvh9KPWVHdcB5FoDM4TskBz8vENR
NDfNyWImmnE2xRCxi7GjTXI7RAyaiEDGbHtpoO+E7EN3EWv1JyhkhBhL0mBpQLGk
gfzjdn7W2s5RbvH4XQFxdF5AgvnQZdMp5L92DC14/77Uo7fZXcU1VUGvASacpYu8
A2z3jZBRI+YDMeLSGXdha5LDT2KoAUu5WE9Ms3OjEOn4jfoOmPDxEwsbpupFlk/i
PRclY1oitWkOgLTTg+ZO/h72tj+kPaczVryVcdM4NKvC+10xyXHk2snW0JUxO1cI
Kls9d3f0ADBeb5bUrHc6zBk0sj4Bx8sGWigZCUEU1QCirTj/83F3g+RwM0dSuS6g
HFw5DTZ8WvPfn9SH2RQi6D4lOZydifxOOcD72iZiyt4rOpsNkO1BY74L8oNHPcuv
ukYQinLttpCiuHJFU4SYjsqH5FRkpqaun0ovD9SF8icEIJM0igI0ZJ+AMZf9ZnQJ
Ws7aijqwzoFw1GcKxNYFwDxRa5Q85pVwXkl6YS46lZGP70hqrVBgxBG/pBDBY+M7
lPtszi1Pp/9LpUIZdJLjEDIULWM3qVPLEY6EEtC70syue+XKevU=
=ZjkQ
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v5.10.118, created. v5.10.118
by postmaster@open-mesh.org
The annotated tag, v5.10.118 has been created
at 890a3113177bfef4117c6f244d2e01e534190462 (tag)
tagging c204ee3350ebbc4e2ab108cbce7afc0cac1c407d (commit)
replaces v5.10.115
tagged by Greg Kroah-Hartman
on Wed May 25 09:18:12 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 5.10.118 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKN2DQACgkQONu9yGCS
aT7E8BAAk4Xj9PJFbGXcGSnP+8vtcxykXbPeDAmOXO8PGFkdW56e27gxe7n5wnJY
gD8YwLysppWiJa0MSHlQdSRzD7lp6SI40YWSb6gnuB5xYBhZCGoENEYZ57LL/ObF
3Gx1nDMBbtSZK/cBMFL2pdMJA2vRWn5zpWsKByyNSen6lOECVeaOJw8PHZI967/N
0avOiRQrkJavY6N8wOTppX1gy3P864SLA/ppJHJeseksAV9z0immZKuI76Ech3/g
XYi5WG+iP7JCm8+ApdlcnfB2zeJVBi0fTZXr+F2PpeXJz5X5iKG6kmg69GCbu9CO
gnC7ZQST9bEGsZkPSwQ2lhP6bD8GOXItiW5yNAlMv3XTv5gLqs3cgJY0CboxuMsw
hvDUXoXWsOM0nr45SECm+l2kZHtNX7F3V2gutj4LDUDocmkTibuXweNA1upUwhEf
43RnqPHCZO9fA5GBfsExDc2Ha8/U/nhtwxAopbK6vJ0Dbyx2Vv0ewfuvh5/dnJru
c3zkTokiW0+J2zCZqmgFKiOeLBky9xKqBQQOGj9CqpyFbU2A8Nmlu0FT+2x6LI3y
f3Q0cHuy58MdoUJXzLj48+firswcFQBmBX+aEj1PfBWvRmQhiLCsX7BabEDJ0JJX
m9NMkkuEKsTlDXQNTL8rJg7Cf95orEY7y5ihg01VfkvUfT/T5PE=
=jSgt
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v5.15.43, created. v5.15.43
by postmaster@open-mesh.org
The annotated tag, v5.15.43 has been created
at 90dce17b4f29be71c06df696af06be2d582fb499 (tag)
tagging 0e5bb338bf471ec46924f744c4301751bab8793a (commit)
replaces v5.15.39
tagged by Greg Kroah-Hartman
on Wed May 25 14:42:12 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 5.15.43 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKOJCQACgkQONu9yGCS
aT7yzRAAlM2gNDpKJvhGdg7BRPg2bH4PHT+Z2TY2D2J3LS0mQxO5hPIAIX1D1HVm
xs1WmqfV/LGUXiFyty34CWANN0cuKREVAMZahW9Y/gDfCNi4xryxpuaQ5dsuuIJu
TLuvpX7u0ePyfC9hTqQoIZx+fmiLC60e62Psfp75nd4W1nr+tsNIO2qVFBK0X4xW
8EyuSUi+fQTYYJqO3jUSoE0mUemQITC5ov1AuAQsVCM4qB12jE5HsK42MyvPEUDg
KJmbxv9pcL2QerauH7R890hl/p9J6LTB8R0uqyX4NZvMWW+PvTlzW9BWA82us1k0
Pych0GjCFkpbyNqCeOQvF1PvHyDyDdXf72sH8Qhd+wz8+0pGreDrO9UdyNbNsI/L
TYxhkmVd4UMFD6hcMnP3rJXEhZOSs2mhvBv0/KpjL6E9I8+LlrInUbWA1MqbAZB0
fSkKSwYUC3roKWE/dXT1RqeXR98OHHpHZJ837cQrRwW7Zr9cKfsb5sNLOmBi+S5J
UqWrJzeVnz0s/W1VZU0vC4V0KeLo5WHC3Y4SpWUMPbL/gj+FYOX06kqc+Zs4s6cY
fcimeYnsnQ9iGqo/DmShBJZNahbEmxh0BT6CyZFnTFVfFMrW7m8X2hKVm9xWn2fp
fzWuDBs1VBL84W1JyHPJp8VldKBh7ASF+7O0cate9cDrdmiYzh8=
=Soyp
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v5.17.11, created. v5.17.11
by postmaster@open-mesh.org
The annotated tag, v5.17.11 has been created
at ba79b77722e71f82e3670005e4d0b3b1b02c9c1e (tag)
tagging e960d734930b58bd6ce00c631ea117af0764473c (commit)
replaces v5.17.7
tagged by Greg Kroah-Hartman
on Wed May 25 14:44:46 2022 +0200
- Shortlog ------------------------------------------------------------
This is the 5.17.11 stable release
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmKOJL4ACgkQONu9yGCS
aT7uYQ//WubgSDSMWNYLHuuQ5j5wiK3DB1ux36JQ7k15H0v2/xU/IRXD3HgZxb3w
oj9yAGrIX+9wgq3CaKnddT9DjgTTGkVH40OF0oXWebnviw7y43SttqF2YKWDV4wq
gEXM68aBlLjlR2nSEnH12PGXOaOl4l6WwDqcX2ubm+f7JxCMz07FF7T1BMbmJrOD
VTx97NbKZnxNmZk6tdXMO1hnoc64MsJ7zTfpUUWA8Z4a5VymNvCMnRuo7wUOwyX9
LmqPG+B0VJUopOb/zvJHKnamTWS+MGKhC9DW1noSU4b4+KZAdg0s860aRmAY3ayz
vD8xJi3iksruzd1OU01LXYjZO8w5p5X8LM6bbd36MA1ejI9NVWTKwZrPj68DzdYc
ehuKx+ycGTfXAKcF8hMjKdX+mV+2neP1UOo9KLaR7TkzIESxPHRFNsqu1d7IngWW
416QZBO+2mDoOkaw69VJeomOj8pkz43lKXTVBa61bAbTPNitr1F6snwCub2jcWyS
qpOzxad26rqhVEHVTtpGuiVIBh2joF6eq7cpNjF9EVEMK+TTUuUFRjFxyTbOqJ3F
m+Jg8FNh2iIAJUU6RL+bFY/+hIga9Hkiy1+OnBJGNOPdcnQ+cEU/t6xcWsBG87sY
0GLqepqGnaCtaVNsBjlFqo2/9jA+WKTDU9s/9jbbu2SX9oQ+wKA=
=BRS1
-----END PGP SIGNATURE-----
Sven Eckelmann (1):
batman-adv: Don't skb_split skbuffs with frag_list
-----------------------------------------------------------------------
--
linux integration
8 months, 1 week
[linux-merge]linux integration; annotated tag, v5.18, created. v5.18
by postmaster@open-mesh.org
The annotated tag, v5.18 has been created
at 99cd00206e418c5fb0e9bd885ded84b8781194b7 (tag)
tagging 4b0986a3613c92f4ec1bdc7f60ec66fea135991f (commit)
replaces v5.18-rc7
tagged by Linus Torvalds
on Sun May 22 09:52:31 2022 -1000
- Shortlog ------------------------------------------------------------
Linux 5.18
-----BEGIN PGP SIGNATURE-----
iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAmKKlIAeHHRvcnZhbGRz
QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGC3oH/iPm/fLG2sJut8My
sU0RC9K+6ESV5h2Qy6k00/lqKstlu4EvBjw4V8vYpx3Q2+hbSFMn2SeWqqqT3Lkk
Zb8KINCFuuyMtdCBb42PV0zhUf5pCQF7ocm/Ae4jllDHtPmqk3WJ6IGtZBK5JBlw
z6RR/wKt0y0MRj9eZyPyYjOee2L2vuVh4tgnexK/4L8g2ZtMMRThhvUzSMWG4zxR
STYYNp0uFcfT1Vt85+ODevFH4TvdECAj+SqAegN+seHLM17YY7M0/WiIYpxGRv8P
lIpDQl4PBU8EBkpI5hkpJ/3qPincbuVOMLsYfxFtpcjjG12vGjFp2krGpS3TedZQ
3mvaJ7c=
=vLke
-----END PGP SIGNATURE-----
-----------------------------------------------------------------------
--
linux integration
8 months, 2 weeks
[batman-adv] master: batman-adv: wrap the wireless pointers in struct net_device in an ifdef (caa1eb0c)
by postmaster@open-mesh.org
Repository : ssh://git@diktynna/batman-adv
On branch : master
>---------------------------------------------------------------
commit caa1eb0cf7bf8ebfe43bba06b890252a865efa91
Author: Jakub Kicinski <kuba(a)kernel.org>
Date: Thu May 19 13:20:54 2022 -0700
batman-adv: wrap the wireless pointers in struct net_device in an ifdef
Most protocol-specific pointers in struct net_device are under
a respective ifdef. Wireless is the notable exception. Since
there's a sizable number of custom-built kernels for datacenter
workloads which don't build wireless it seems reasonable to
ifdefy those pointers as well.
While at it move IPv4 and IPv6 pointers up, those are special
for obvious reasons.
Acked-by: Johannes Berg <johannes(a)sipsolutions.net>
Acked-by: Stefan Schmidt <stefan(a)datenfreihafen.org> # ieee802154
Acked-by: Sven Eckelmann <sven(a)narfation.org>
Signed-off-by: Jakub Kicinski <kuba(a)kernel.org>
Signed-off-by: David S. Miller <davem(a)davemloft.net>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
>---------------------------------------------------------------
caa1eb0cf7bf8ebfe43bba06b890252a865efa91
net/batman-adv/hard-interface.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index 83fb51b6..b8f8da7e 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -307,9 +307,11 @@ static bool batadv_is_cfg80211_netdev(struct net_device *net_device)
if (!net_device)
return false;
+#if IS_ENABLED(CONFIG_CFG80211)
/* cfg80211 drivers have to set ieee80211_ptr */
if (net_device->ieee80211_ptr)
return true;
+#endif
return false;
}
8 months, 2 weeks
[alfred] master: alfred: notify event listener via unix socket (b106a7a)
by postmaster@open-mesh.org
Repository : ssh://git@diktynna/alfred
On branch : master
>---------------------------------------------------------------
commit b106a7a36f98415f5e8a5b2a1dc13d7d47477f89
Author: Marek Lindner <mareklindner(a)neomailbox.ch>
Date: Thu May 19 09:26:05 2022 +0200
alfred: notify event listener via unix socket
The alfred server instance accepts event notification registration
via the unix socket. These notification sockets only inform
registered parties of the availability of an alfred datatype change.
The actual data itself needs to be retrieved via the existing data
retrieval mechanisms.
Unlike the update-command this event monitor allows:
- multiple parallel listeners
- programmatic access to changes without requiring multiple processes
The alfred client allows to monitor events via the newly added '-E'
(event monitor) command line option. Serving as debugging tool and
example code at the same time.
Signed-off-by: Marek Lindner <mareklindner(a)neomailbox.ch>
Signed-off-by: Sven Eckelmann <sven(a)narfation.org>
>---------------------------------------------------------------
b106a7a36f98415f5e8a5b2a1dc13d7d47477f89
alfred.h | 13 ++++++
client.c | 58 +++++++++++++++++++++++++
main.c | 10 ++++-
man/alfred.8 | 3 ++
packet.h | 27 ++++++++++++
recv.c | 5 ++-
server.c | 1 +
unix_sock.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 251 insertions(+), 2 deletions(-)
diff --git a/alfred.h b/alfred.h
index 8bea033..127b115 100644
--- a/alfred.h
+++ b/alfred.h
@@ -99,6 +99,7 @@ enum clientmode {
CLIENT_CHANGE_INTERFACE,
CLIENT_CHANGE_BAT_IFACE,
CLIENT_SERVER_STATUS,
+ CLIENT_EVENT_MONITOR,
};
struct interface {
@@ -118,8 +119,16 @@ struct interface {
struct list_head list;
};
+struct event_listener {
+ int fd;
+ struct epoll_handle epoll;
+
+ struct list_head list;
+};
+
struct globals {
struct list_head interfaces;
+ struct list_head event_listeners;
char *net_iface;
struct server *best_server; /* NULL if we are a server ourselves */
@@ -171,6 +180,7 @@ int alfred_client_modeswitch(struct globals *globals);
int alfred_client_change_interface(struct globals *globals);
int alfred_client_change_bat_iface(struct globals *globals);
int alfred_client_server_status(struct globals *globals);
+int alfred_client_event_monitor(struct globals *globals);
/* recv.c */
int recv_alfred_packet(struct globals *globals, struct interface *interface,
int recv_sock);
@@ -199,6 +209,9 @@ int unix_sock_open_client(struct globals *globals);
int unix_sock_close(struct globals *globals);
int unix_sock_req_data_finish(struct globals *globals,
struct transaction_head *head);
+void unix_sock_events_close_all(struct globals *globals);
+void unix_sock_event_notify(struct globals *globals, uint8_t type,\
+ const uint8_t source[ETH_ALEN]);
/* vis.c */
int vis_update_data(struct globals *globals);
/* netsock.c */
diff --git a/client.c b/client.c
index 81cdd7c..ace42b9 100644
--- a/client.c
+++ b/client.c
@@ -452,3 +452,61 @@ err:
unix_sock_close(globals);
return 0;
}
+
+int alfred_client_event_monitor(struct globals *globals)
+{
+ struct alfred_event_register_v0 event_register;
+ struct alfred_event_notify_v0 event_notify;
+ int ret, len;
+
+ if (unix_sock_open_client(globals))
+ return -1;
+
+ len = sizeof(event_register);
+
+ event_register.header.type = ALFRED_EVENT_REGISTER;
+ event_register.header.version = ALFRED_VERSION;
+ event_register.header.length = 0;
+
+ ret = write(globals->unix_sock, &event_register, len);
+ if (ret != len) {
+ fprintf(stderr, "%s: only wrote %d of %d bytes: %s\n",
+ __func__, ret, len, strerror(errno));
+ goto err;
+ }
+
+ while (true) {
+ len = read(globals->unix_sock, &event_notify, sizeof(event_notify));
+ if (len == 0) {
+ fprintf(stdout, "Server closed the connection\n");
+ goto err;
+ }
+
+ if (len < 0) {
+ perror("read from unix socket failed");
+ goto err;
+ }
+
+ if (len != sizeof(event_notify)) {
+ fprintf(stderr, "notify read bytes: %d (expected: %zu)\n",
+ len, sizeof(event_notify));
+ goto err;
+ }
+
+ if (event_notify.header.version != ALFRED_VERSION)
+ continue;
+
+ if (event_notify.header.type != ALFRED_EVENT_NOTIFY)
+ continue;
+
+ fprintf(stdout, "Event: type = %hhu, source = %02x:%02x:%02x:%02x:%02x:%02x\n",
+ event_notify.type,
+ event_notify.source[0], event_notify.source[1],
+ event_notify.source[2], event_notify.source[3],
+ event_notify.source[4], event_notify.source[5]);
+ }
+
+err:
+ unix_sock_close(globals);
+ return 0;
+}
diff --git a/main.c b/main.c
index 30e18a5..3fe7b42 100644
--- a/main.c
+++ b/main.c
@@ -39,6 +39,7 @@ static void alfred_usage(void)
printf(" -I, --change-interface [interface] change to the specified interface(s)\n");
printf(" -B, --change-bat-iface [interface] change to the specified batman-adv interface\n");
printf(" -S, --server-status request server status info such as mode & interfaces\n");
+ printf(" -E, --event-monitor monitor alfred data record update events\n");
printf("\n");
printf("server mode options:\n");
printf(" -i, --interface specify the interface (or comma separated list of interfaces) to listen on\n");
@@ -164,6 +165,7 @@ static struct globals *alfred_init(int argc, char *argv[])
{"change-interface", required_argument, NULL, 'I'},
{"change-bat-iface", required_argument, NULL, 'B'},
{"server-status", no_argument, NULL, 'S'},
+ {"event-monitor", no_argument, NULL, 'E'},
{"unix-path", required_argument, NULL, 'u'},
{"update-command", required_argument, NULL, 'c'},
{"version", no_argument, NULL, 'v'},
@@ -181,6 +183,7 @@ static struct globals *alfred_init(int argc, char *argv[])
memset(globals, 0, sizeof(*globals));
INIT_LIST_HEAD(&globals->interfaces);
+ INIT_LIST_HEAD(&globals->event_listeners);
globals->net_iface = NULL;
globals->opmode = OPMODE_SECONDARY;
globals->clientmode = CLIENT_NONE;
@@ -198,7 +201,7 @@ static struct globals *alfred_init(int argc, char *argv[])
time_random_seed();
- while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:B:Su:dc:p:4:f", long_options,
+ while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:B:SEu:dc:p:4:f", long_options,
&opt_ind)) != -1) {
switch (opt) {
case 'r':
@@ -263,6 +266,9 @@ static struct globals *alfred_init(int argc, char *argv[])
case 'S':
globals->clientmode = CLIENT_SERVER_STATUS;
break;
+ case 'E':
+ globals->clientmode = CLIENT_EVENT_MONITOR;
+ break;
case 'u':
globals->unix_path = optarg;
break;
@@ -328,6 +334,8 @@ int main(int argc, char *argv[])
return alfred_client_change_bat_iface(globals);
case CLIENT_SERVER_STATUS:
return alfred_client_server_status(globals);
+ case CLIENT_EVENT_MONITOR:
+ return alfred_client_event_monitor(globals);
}
return 0;
diff --git a/man/alfred.8 b/man/alfred.8
index cf0eafc..ca83f02 100644
--- a/man/alfred.8
+++ b/man/alfred.8
@@ -97,6 +97,9 @@ Change the alfred server to use the new \fBbatman-adv interface\fP
.TP
\fB\-S\fP, \fB\-\-server\-status\fP
Request server status information such as mode & interfaces\fP
+.TP
+\fB\-E\fP, \fB\-\-event\-monitor\fP
+Start alfred event monitor connecting to the alfred server and reporting update events\fP
.
.SH SERVER OPTIONS
.TP
diff --git a/packet.h b/packet.h
index 0c1a2eb..b8d528e 100644
--- a/packet.h
+++ b/packet.h
@@ -59,6 +59,8 @@ struct alfred_transaction_mgmt {
* @ALFRED_STATUS_ERROR: Error was detected during the transaction
* @ALFRED_MODESWITCH: Switch between different operation modes
* @ALFRED_CHANGE_INTERFACE: Change the listening interface
+ * @ALFRED_EVENT_REGISTER: Request to be notified about alfred update events
+ * @ALFRED_EVENT_NOTIFY: Data record update has been received
*/
enum alfred_packet_type {
ALFRED_PUSH_DATA = 0,
@@ -70,6 +72,8 @@ enum alfred_packet_type {
ALFRED_CHANGE_INTERFACE = 6,
ALFRED_CHANGE_BAT_IFACE = 7,
ALFRED_SERVER_STATUS = 8,
+ ALFRED_EVENT_REGISTER = 9,
+ ALFRED_EVENT_NOTIFY = 10,
};
/* packets */
@@ -229,6 +233,29 @@ struct alfred_server_status_rep_v0 {
struct alfred_tlv header;
} __packed;
+/**
+ * struct alfred_event_register_v0 - event registration message
+ * @header: TLV header describing the complete packet
+ *
+ * Sent by the client to daemon to register for data record updates
+ */
+struct alfred_event_register_v0 {
+ struct alfred_tlv header;
+} __packed;
+
+/**
+ * struct alfred_event_notify_v0 - event notification message
+ * @header: TLV header describing the complete packet
+ * @type: Type of the data triggering the event
+ *
+ * Sent by the daemon to client on data record update
+ */
+struct alfred_event_notify_v0 {
+ struct alfred_tlv header;
+ uint8_t type;
+ uint8_t source[ETH_ALEN];
+} __packed;
+
/**
* struct alfred_status_v0 - Status info of a transaction
* @header: TLV header describing the complete packet
diff --git a/recv.c b/recv.c
index 8acad10..75e3faf 100644
--- a/recv.c
+++ b/recv.c
@@ -76,8 +76,11 @@ static int finish_alfred_push_data(struct globals *globals,
/* check that data was changed */
if (new_entry_created ||
dataset->data.header.length != data_len ||
- memcmp(dataset->buf, data->data, data_len) != 0)
+ memcmp(dataset->buf, data->data, data_len) != 0) {
changed_data_type(globals, data->header.type);
+ unix_sock_event_notify(globals, data->header.type,
+ data->source);
+ }
/* free old buffer */
if (dataset->buf) {
diff --git a/server.c b/server.c
index 52cdbe7..0d792b0 100644
--- a/server.c
+++ b/server.c
@@ -518,5 +518,6 @@ int alfred_server(struct globals *globals)
netsock_close_all(globals);
unix_sock_close(globals);
+ unix_sock_events_close_all(globals);
return 0;
}
diff --git a/unix_sock.c b/unix_sock.c
index ef72aa0..ce08a51 100644
--- a/unix_sock.c
+++ b/unix_sock.c
@@ -13,6 +13,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <fcntl.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/un.h>
@@ -26,6 +27,8 @@
static void unix_sock_read(struct globals *globals,
struct epoll_handle *handle __unused,
struct epoll_event *ev __unused);
+static int unix_sock_register_listener(struct globals *globals,
+ int client_sock);
int unix_sock_open_daemon(struct globals *globals)
{
@@ -99,6 +102,7 @@ static int unix_sock_add_data(struct globals *globals,
struct alfred_push_data_v0 *push,
int client_sock)
{
+ bool new_entry_created = false;
struct alfred_data *data;
struct dataset *dataset;
int len, data_len, ret = -1;
@@ -153,10 +157,18 @@ static int unix_sock_add_data(struct globals *globals,
free(dataset);
goto err;
}
+ new_entry_created = true;
}
dataset->data_source = SOURCE_LOCAL;
clock_gettime(CLOCK_MONOTONIC, &dataset->last_seen);
+ /* check that data was changed */
+ if (new_entry_created ||
+ dataset->data.header.length != data_len ||
+ memcmp(dataset->buf, data->data, data_len) != 0)
+ unix_sock_event_notify(globals, data->header.type,
+ data->source);
+
/* free old buffer */
free(dataset->buf);
@@ -554,6 +566,9 @@ static void unix_sock_read(struct globals *globals,
case ALFRED_SERVER_STATUS:
unix_sock_server_status(globals, client_sock);
break;
+ case ALFRED_EVENT_REGISTER:
+ unix_sock_register_listener(globals, client_sock);
+ break;
default:
/* unknown packet type */
goto err;
@@ -570,3 +585,124 @@ int unix_sock_close(struct globals *globals)
close(globals->unix_sock);
return 0;
}
+
+static void unix_sock_event_listener_free(struct event_listener *listener)
+{
+ list_del(&listener->list);
+ close(listener->fd);
+ free(listener);
+}
+
+static void unix_sock_event_listener_handle(struct globals *globals __unused,
+ struct epoll_handle *handle,
+ struct epoll_event *ev)
+{
+ struct event_listener *listener;
+ char buff[4];
+ int ret;
+
+ listener = container_of(handle, struct event_listener, epoll);
+
+ if (ev->events & EPOLLERR) {
+ fprintf(stderr, "Error on event listener detected: %d\n",
+ listener->fd);
+ unix_sock_event_listener_free(listener);
+ return;
+ }
+
+ if (ev->events & EPOLLIN) {
+ ret = recv(listener->fd, buff, sizeof(buff),
+ MSG_PEEK | MSG_DONTWAIT);
+ /* listener has hung up */
+ if (ret == 0)
+ unix_sock_event_listener_free(listener);
+ else if (ret > 0) {
+ fprintf(stderr, "Event listener has written to socket: %d - closing\n",
+ listener->fd);
+ unix_sock_event_listener_free(listener);
+ }
+ }
+}
+
+static int unix_sock_register_listener(struct globals *globals, int client_sock)
+{
+ struct event_listener *listener;
+ struct epoll_event ev;
+ int ret;
+
+ ret = fcntl(client_sock, F_GETFL, 0);
+ if (ret < 0) {
+ perror("failed to get file status flags");
+ goto err;
+ }
+
+ ret = fcntl(client_sock, F_SETFL, ret | O_NONBLOCK);
+ if (ret < 0) {
+ perror("failed to set file status flags");
+ goto err;
+ }
+
+ listener = malloc(sizeof(*listener));
+ if (!listener)
+ goto err;
+
+ ev.events = EPOLLIN;
+ ev.data.ptr = &listener->epoll;
+ listener->epoll.handler = unix_sock_event_listener_handle;
+
+ if (epoll_ctl(globals->epollfd, EPOLL_CTL_ADD, client_sock,
+ &ev) == -1) {
+ perror("Failed to add epoll for event listener");
+ goto err;
+ }
+
+ listener->fd = client_sock;
+ list_add_tail(&listener->list, &globals->event_listeners);
+ return 0;
+
+err:
+ close(client_sock);
+ return -1;
+}
+
+static void unix_sock_event_notify_listener(struct event_listener *listener,
+ uint8_t type,
+ const uint8_t source[ETH_ALEN])
+{
+ struct alfred_event_notify_v0 notify;
+ int ret;
+
+ notify.header.type = ALFRED_EVENT_NOTIFY;
+ notify.header.version = ALFRED_VERSION;
+ notify.header.length = FIXED_TLV_LEN(notify);
+ notify.type = type;
+ memcpy(¬ify.source, source, ETH_ALEN);
+
+ ret = write(listener->fd, ¬ify, sizeof(notify));
+ if (ret == sizeof(notify))
+ return;
+
+ unix_sock_event_listener_free(listener);
+}
+
+void unix_sock_events_close_all(struct globals *globals)
+{
+ struct event_listener *listener, *tmp;
+
+ list_for_each_entry_safe(listener, tmp,
+ &globals->event_listeners, list) {
+ unix_sock_event_listener_free(listener);
+ }
+}
+
+void unix_sock_event_notify(struct globals *globals, uint8_t type,
+ const uint8_t source[ETH_ALEN])
+{
+ struct event_listener *listener, *tmp;
+
+ /* if event notify is unsuccessful, listener socket is closed */
+ list_for_each_entry_safe(listener, tmp,
+ &globals->event_listeners, list) {
+ unix_sock_event_notify_listener(listener, type, source);
+ }
+}
8 months, 2 weeks