From: kernel test robot <lkp@intel.com>
To: Lukasz Majewski <lukma@denx.de>,
Tristram.Ha@microchip.com, Eric Dumazet <edumazet@google.com>,
davem@davemloft.net
Cc: oe-kbuild-all@lists.linux.dev, Andrew Lunn <andrew@lunn.ch>,
Florian Fainelli <f.fainelli@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Paolo Abeni <pabeni@redhat.com>,
Kristian Overskeid <koverskeid@gmail.com>,
Matthieu Baerts <matthieu.baerts@tessares.net>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Lukasz Majewski <lukma@denx.de>
Subject: Re: [PATCH] net: hsr : Provide fix for HSRv1 supervisor frames decoding
Date: Sat, 26 Aug 2023 08:38:52 +0800 [thread overview]
Message-ID: <202308260833.erhVKBnc-lkp@intel.com> (raw)
In-Reply-To: <20230825153111.228768-1-lukma@denx.de>
Hi Lukasz,
kernel test robot noticed the following build errors:
[auto build test ERROR on net-next/main]
[also build test ERROR on net/main linus/master v6.5-rc7 next-20230825]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Lukasz-Majewski/net-hsr-Provide-fix-for-HSRv1-supervisor-frames-decoding/20230825-233423
base: net-next/main
patch link: https://lore.kernel.org/r/20230825153111.228768-1-lukma%40denx.de
patch subject: [PATCH] net: hsr : Provide fix for HSRv1 supervisor frames decoding
config: riscv-randconfig-001-20230826 (https://download.01.org/0day-ci/archive/20230826/202308260833.erhVKBnc-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230826/202308260833.erhVKBnc-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308260833.erhVKBnc-lkp@intel.com/
All errors (new ones prefixed by >>):
net/hsr/hsr_framereg.c: In function 'hsr_handle_sup_frame':
>> net/hsr/hsr_framereg.c:289:12: error: 'And' undeclared (first use in this function)
289 | * And leave the HSR tag.
| ^~~
net/hsr/hsr_framereg.c:289:12: note: each undeclared identifier is reported only once for each function it appears in
>> net/hsr/hsr_framereg.c:289:15: error: expected ';' before 'leave'
289 | * And leave the HSR tag.
| ^~~~~~
| ;
vim +/And +289 net/hsr/hsr_framereg.c
249
250 /* Use the Supervision frame's info about an eventual macaddress_B for merging
251 * nodes that has previously had their macaddress_B registered as a separate
252 * node.
253 */
254 void hsr_handle_sup_frame(struct hsr_frame_info *frame)
255 {
256 struct hsr_node *node_curr = frame->node_src;
257 struct hsr_port *port_rcv = frame->port_rcv;
258 struct hsr_priv *hsr = port_rcv->hsr;
259 struct hsr_sup_payload *hsr_sp;
260 struct hsr_sup_tlv *hsr_sup_tlv;
261 struct hsr_node *node_real;
262 struct sk_buff *skb = NULL;
263 struct list_head *node_db;
264 struct ethhdr *ethhdr;
265 int i;
266 unsigned int pull_size = 0;
267 unsigned int total_pull_size = 0;
268
269 /* Here either frame->skb_hsr or frame->skb_prp should be
270 * valid as supervision frame always will have protocol
271 * header info.
272 */
273 if (frame->skb_hsr)
274 skb = frame->skb_hsr;
275 else if (frame->skb_prp)
276 skb = frame->skb_prp;
277 else if (frame->skb_std)
278 skb = frame->skb_std;
279 if (!skb)
280 return;
281
282 /* Leave the ethernet header. */
283 pull_size = sizeof(struct ethhdr);
284 skb_pull(skb, pull_size);
285 total_pull_size += pull_size;
286
287 ethhdr = (struct ethhdr *)skb_mac_header(skb);
288
> 289 * And leave the HSR tag.
290 *
291 * The HSRv1 supervisory frame encapsulates the v0 frame
292 * with EtherType of 0x88FB
293 */
294 if (ethhdr->h_proto == htons(ETH_P_HSR)) {
295 if (hsr->prot_version == HSR_V1)
296 /* In the above step the DA, SA and EtherType
297 * (0x892F - HSRv1) bytes has been removed.
298 *
299 * As the HSRv1 has the HSR header added, one need
300 * to remove path_and_LSDU_size and sequence_nr fields.
301 *
302 */
303 pull_size = 4;
304 else
305 pull_size = sizeof(struct hsr_tag);
306
307 skb_pull(skb, pull_size);
308 total_pull_size += pull_size;
309 }
310
311 /* And leave the HSR sup tag. */
312 pull_size = sizeof(struct hsr_tag);
313 skb_pull(skb, pull_size);
314 total_pull_size += pull_size;
315
316 /* get HSR sup payload */
317 if (hsr->prot_version == HSR_V1) {
318 /* In the HSRv1 supervisor frame, when
319 * one with EtherType = 0x88FB is extracted, the Node A
320 * MAC address is preceded with type and length elements of TLV
321 * data field.
322 *
323 * It needs to be removed to get the remote peer MAC address.
324 */
325 pull_size = sizeof(struct hsr_sup_tlv);
326 skb_pull(skb, pull_size);
327 total_pull_size += pull_size;
328 }
329
330 hsr_sp = (struct hsr_sup_payload *)skb->data;
331
332 /* Merge node_curr (registered on macaddress_B) into node_real */
333 node_db = &port_rcv->hsr->node_db;
334 node_real = find_node_by_addr_A(node_db, hsr_sp->macaddress_A);
335 if (!node_real)
336 /* No frame received from AddrA of this node yet */
337 node_real = hsr_add_node(hsr, node_db, hsr_sp->macaddress_A,
338 HSR_SEQNR_START - 1, true,
339 port_rcv->type);
340 if (!node_real)
341 goto done; /* No mem */
342 if (node_real == node_curr)
343 /* Node has already been merged */
344 goto done;
345
346 /* Leave the first HSR sup payload. */
347 pull_size = sizeof(struct hsr_sup_payload);
348 skb_pull(skb, pull_size);
349 total_pull_size += pull_size;
350
351 /* Get second supervision tlv */
352 hsr_sup_tlv = (struct hsr_sup_tlv *)skb->data;
353 /* And check if it is a redbox mac TLV */
354 if (hsr_sup_tlv->HSR_TLV_type == PRP_TLV_REDBOX_MAC) {
355 /* We could stop here after pushing hsr_sup_payload,
356 * or proceed and allow macaddress_B and for redboxes.
357 */
358 /* Sanity check length */
359 if (hsr_sup_tlv->HSR_TLV_length != 6)
360 goto done;
361
362 /* Leave the second HSR sup tlv. */
363 pull_size = sizeof(struct hsr_sup_tlv);
364 skb_pull(skb, pull_size);
365 total_pull_size += pull_size;
366
367 /* Get redbox mac address. */
368 hsr_sp = (struct hsr_sup_payload *)skb->data;
369
370 /* Check if redbox mac and node mac are equal. */
371 if (!ether_addr_equal(node_real->macaddress_A, hsr_sp->macaddress_A)) {
372 /* This is a redbox supervision frame for a VDAN! */
373 goto done;
374 }
375 }
376
377 ether_addr_copy(node_real->macaddress_B, ethhdr->h_source);
378 spin_lock_bh(&node_real->seq_out_lock);
379 for (i = 0; i < HSR_PT_PORTS; i++) {
380 if (!node_curr->time_in_stale[i] &&
381 time_after(node_curr->time_in[i], node_real->time_in[i])) {
382 node_real->time_in[i] = node_curr->time_in[i];
383 node_real->time_in_stale[i] =
384 node_curr->time_in_stale[i];
385 }
386 if (seq_nr_after(node_curr->seq_out[i], node_real->seq_out[i]))
387 node_real->seq_out[i] = node_curr->seq_out[i];
388 }
389 spin_unlock_bh(&node_real->seq_out_lock);
390 node_real->addr_B_port = port_rcv->type;
391
392 spin_lock_bh(&hsr->list_lock);
393 if (!node_curr->removed) {
394 list_del_rcu(&node_curr->mac_list);
395 node_curr->removed = true;
396 kfree_rcu(node_curr, rcu_head);
397 }
398 spin_unlock_bh(&hsr->list_lock);
399
400 done:
401 /* Push back here */
402 skb_push(skb, total_pull_size);
403 }
404
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2023-08-26 0:39 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-25 15:31 [PATCH] net: hsr : Provide fix for HSRv1 supervisor frames decoding Lukasz Majewski
2023-08-25 18:10 ` Tristram.Ha
2023-08-28 9:02 ` Lukasz Majewski
2023-08-31 13:38 ` Lukasz Majewski
2023-09-04 15:54 ` Lukasz Majewski
2023-08-25 23:44 ` kernel test robot
2023-08-26 0:38 ` kernel test robot [this message]
2023-09-05 8:06 ` Sebastian Andrzej Siewior
2023-09-05 9:55 ` Lukasz Majewski
2023-09-11 14:57 ` Lukasz Majewski
2023-09-11 15:01 ` Sebastian Andrzej Siewior
2023-09-12 8:18 ` Lukasz Majewski
2023-09-13 16:32 ` Sebastian Andrzej Siewior
2023-09-14 12:26 ` Lukasz Majewski
2023-09-14 12:32 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202308260833.erhVKBnc-lkp@intel.com \
--to=lkp@intel.com \
--cc=Tristram.Ha@microchip.com \
--cc=andrew@lunn.ch \
--cc=bigeasy@linutronix.de \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=koverskeid@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukma@denx.de \
--cc=matthieu.baerts@tessares.net \
--cc=netdev@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=pabeni@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).