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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.