How to use dhcp relay over ipsec0/wwan0 with zero MAC address?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

How to use dhcp relay over ipsec0/wwan0 with zero MAC address?

Qingtao
Hi,

I am trying to use the dhcrelay on an ipsec0 interface that was built upon a
cellular modem interface, wwan0 for example. The problem I am running into
is that, the QMI qmi_wwan.c kernel driver for the cellular modem works in
the raw_ip mode and will setup wwanX relevant net_device with type ==
ARPHRD_NONE and hard_header_len == 0, since the MAC address for wwan0 only
makes sense for the host and not used on the USB link from the host to the
cellular modem.

Then the ipsec0 interface will inherit both the IP address and the MAC
address, which will upset the dhcp relay daemon: in lpf.c get_hw_addr(), the
switch(sa->sa_family) case structure will thow out the following error:

Unsupported device type 65534 for "ipsec0"

The 65534 == 0xFFFE, or ARPHRD_NONE. I am wondering if it is feasible to
change the get_hw_addr() to regard it as an normal case, for example:

+@@ -522,6 +522,11 @@ get_hw_addr(const char *name, struct har
+                       hw->hbuf[0] = HTYPE_FDDI;
+                       memcpy(&hw->hbuf[1], sa->sa_data, 6);
+                       break;
++              case ARPHRD_NONE:
++                      /* When the qmi_wwan.c kernel driver works in the
++                       * raw_ip mode the length of MAC address is zero */
++                      memset(hw, 0, sizeof(struct hardware));
++                      break;
+               default:
+                       log_fatal("Unsupported device type %ld for \"%s\"",
+                                 (long int)sa->sa_family, name);

Would this work?

Thanks in advance!

Harry




--
Sent from: http://isc-dhcp-users.2343191.n4.nabble.com/
_______________________________________________
ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.

dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users
Reply | Threaded
Open this post in threaded view
|

Re: How to use dhcp relay over ipsec0/wwan0 with zero MAC address?

Qingtao
Hi Thomas and other DHCP ISC developers,

Good day! This is my very first attempt to contribute back to the DHCP ISC community. How could I generate and send pull requests for the [hidden email]:isc-projects/dhcp.git repo properly?

Anyway, currently I attached my patchset to the following issue:

https://gitlab.isc.org/isc-projects/dhcp/-/issues/152

Looking forward to hearing from you, much appreciated!

Harry

On Thu, Nov 5, 2020 at 12:09 PM Qingtao <[hidden email]> wrote:
Hi,

I am trying to use the dhcrelay on an ipsec0 interface that was built upon a
cellular modem interface, wwan0 for example. The problem I am running into
is that, the QMI qmi_wwan.c kernel driver for the cellular modem works in
the raw_ip mode and will setup wwanX relevant net_device with type ==
ARPHRD_NONE and hard_header_len == 0, since the MAC address for wwan0 only
makes sense for the host and not used on the USB link from the host to the
cellular modem.

Then the ipsec0 interface will inherit both the IP address and the MAC
address, which will upset the dhcp relay daemon: in lpf.c get_hw_addr(), the
switch(sa->sa_family) case structure will thow out the following error:

Unsupported device type 65534 for "ipsec0"

The 65534 == 0xFFFE, or ARPHRD_NONE. I am wondering if it is feasible to
change the get_hw_addr() to regard it as an normal case, for example:

+@@ -522,6 +522,11 @@ get_hw_addr(const char *name, struct har
+                       hw->hbuf[0] = HTYPE_FDDI;
+                       memcpy(&hw->hbuf[1], sa->sa_data, 6);
+                       break;
++              case ARPHRD_NONE:
++                      /* When the qmi_wwan.c kernel driver works in the
++                       * raw_ip mode the length of MAC address is zero */
++                      memset(hw, 0, sizeof(struct hardware));
++                      break;
+               default:
+                       log_fatal("Unsupported device type %ld for \"%s\"",
+                                 (long int)sa->sa_family, name);

Would this work?

Thanks in advance!

Harry




--
Sent from: http://isc-dhcp-users.2343191.n4.nabble.com/
_______________________________________________
ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.

dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users

_______________________________________________
ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.

dhcp-users mailing list
[hidden email]
https://lists.isc.org/mailman/listinfo/dhcp-users