aboutsummaryrefslogtreecommitdiff
path: root/net/rp-pppoe/files/patch-relay.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rp-pppoe/files/patch-relay.c')
-rw-r--r--net/rp-pppoe/files/patch-relay.c181
1 files changed, 0 insertions, 181 deletions
diff --git a/net/rp-pppoe/files/patch-relay.c b/net/rp-pppoe/files/patch-relay.c
deleted file mode 100644
index e94c2533b57c..000000000000
--- a/net/rp-pppoe/files/patch-relay.c
+++ /dev/null
@@ -1,181 +0,0 @@
---- relay.c.orig 2020-05-27 00:29:37 UTC
-+++ relay.c
-@@ -756,6 +756,11 @@ void
- relayLoop()
- {
- fd_set readable, readableCopy;
-+#if defined(__FreeBSD__)
-+ PPPoEPacket packet;
-+ int size;
-+ int type;
-+#endif
- int maxFD;
- int i, r;
- int sock;
-@@ -785,6 +790,27 @@ relayLoop()
- continue;
- }
-
-+#if defined(__FreeBSD__)
-+ for (i=0; i<NumInterfaces; i++) {
-+ /* Because FreeBSD use one interface for both Discovery and
-+ Session types we use first socket for packet receiving [SeaD] */
-+ if (!FD_ISSET(Interfaces[i].discoverySock, &readableCopy))
-+ continue;
-+ if (receivePacket(Interfaces[i].discoverySock, &packet, &size) < 0)
-+ continue;
-+
-+ /* Ignore unknown code/version */
-+ if (PPPOE_VER(packet.vertype) != 1 || PPPOE_TYPE(packet.vertype) != 1)
-+ continue;
-+
-+ type = etherType(&packet);
-+ if (type == Eth_PPPOE_Discovery) {
-+ relayGotDiscoveryPacket(&Interfaces[i], &packet, size);
-+ } else if (type == Eth_PPPOE_Session) {
-+ relayGotSessionPacket(&Interfaces[i], &packet, size);
-+ }
-+ }
-+#else
- /* Handle session packets first */
- for (i=0; i<NumInterfaces; i++) {
- if (FD_ISSET(Interfaces[i].sessionSock, &readableCopy)) {
-@@ -799,6 +825,7 @@ relayLoop()
- }
- }
-
-+#endif
- /* Handle the session-cleaning process */
- if (FD_ISSET(CleanPipe[0], &readableCopy)) {
- char dummy;
-@@ -818,7 +845,47 @@ relayLoop()
- *%DESCRIPTION:
- * Receives and processes a discovery packet.
- ***********************************************************************/
-+#if defined(__FreeBSD__)
- void
-+relayGotDiscoveryPacket(PPPoEInterface const *iface,
-+ PPPoEPacket *packet,
-+ int size)
-+{
-+
-+ if (ntohs(packet->length) + HDR_SIZE > size) {
-+ syslog(LOG_ERR, "Bogus PPPoE length field (%u)",
-+ (unsigned int) ntohs(packet->length));
-+ return;
-+ }
-+
-+ /* Drop Ethernet frame padding */
-+ if (size > ntohs(packet->length) + HDR_SIZE) {
-+ size = ntohs(packet->length) + HDR_SIZE;
-+ }
-+
-+ switch(packet->code) {
-+ case CODE_PADT:
-+ relayHandlePADT(iface, packet, size);
-+ break;
-+ case CODE_PADI:
-+ relayHandlePADI(iface, packet, size);
-+ break;
-+ case CODE_PADO:
-+ relayHandlePADO(iface, packet, size);
-+ break;
-+ case CODE_PADR:
-+ relayHandlePADR(iface, packet, size);
-+ break;
-+ case CODE_PADS:
-+ relayHandlePADS(iface, packet, size);
-+ break;
-+ default:
-+ syslog(LOG_ERR, "Discovery packet on %s with unknown code %d",
-+ iface->name, (int) packet->code);
-+ }
-+}
-+#else
-+void
- relayGotDiscoveryPacket(PPPoEInterface const *iface)
- {
- PPPoEPacket packet;
-@@ -865,6 +932,7 @@ relayGotDiscoveryPacket(PPPoEInterface const *iface)
- iface->name, (int) packet.code);
- }
- }
-+#endif
-
- /**********************************************************************
- *%FUNCTION: relayGotSessionPacket
-@@ -875,7 +943,66 @@ relayGotDiscoveryPacket(PPPoEInterface const *iface)
- *%DESCRIPTION:
- * Receives and processes a session packet.
- ***********************************************************************/
-+#if defined(__FreeBSD__)
- void
-+relayGotSessionPacket(PPPoEInterface const *iface,
-+ PPPoEPacket *packet,
-+ int size)
-+{
-+ SessionHash *sh;
-+ PPPoESession *ses;
-+
-+ /* Must be a session packet */
-+ if (packet->code != CODE_SESS) {
-+ syslog(LOG_ERR, "Session packet with code %d", (int) packet->code);
-+ return;
-+ }
-+
-+ /* Ignore session packets whose destination address isn't ours */
-+ if (memcmp(packet->ethHdr.h_dest, iface->mac, ETH_ALEN)) {
-+ return;
-+ }
-+
-+ /* Validate length */
-+ if (ntohs(packet->length) + HDR_SIZE > size) {
-+ syslog(LOG_ERR, "Bogus PPPoE length field (%u)",
-+ (unsigned int) ntohs(packet->length));
-+ return;
-+ }
-+
-+ /* Drop Ethernet frame padding */
-+ if (size > ntohs(packet->length) + HDR_SIZE) {
-+ size = ntohs(packet->length) + HDR_SIZE;
-+ }
-+
-+ /* We're in business! Find the hash */
-+ sh = findSession(packet->ethHdr.h_source, packet->session);
-+ if (!sh) {
-+ /* Don't log this. Someone could be running the client and the
-+ relay on the same box. */
-+ return;
-+ }
-+
-+ /* Relay it */
-+ ses = sh->ses;
-+ ses->epoch = Epoch;
-+ sh = sh->peer;
-+ packet->session = sh->sesNum;
-+ memcpy(packet->ethHdr.h_source, sh->interface->mac, ETH_ALEN);
-+ memcpy(packet->ethHdr.h_dest, sh->peerMac, ETH_ALEN);
-+#if 0
-+ fprintf(stderr, "Relaying %02x:%02x:%02x:%02x:%02x:%02x(%s:%d) to %02x:%02x:%02x:%02x:%02x:%02x(%s:%d)\n",
-+ sh->peer->peerMac[0], sh->peer->peerMac[1], sh->peer->peerMac[2],
-+ sh->peer->peerMac[3], sh->peer->peerMac[4], sh->peer->peerMac[5],
-+ sh->peer->interface->name, ntohs(sh->peer->sesNum),
-+ sh->peerMac[0], sh->peerMac[1], sh->peerMac[2],
-+ sh->peerMac[3], sh->peerMac[4], sh->peerMac[5],
-+ sh->interface->name, ntohs(sh->sesNum));
-+#endif
-+ sendPacket(NULL, sh->interface->sessionSock, packet, size);
-+}
-+#else
-+void
- relayGotSessionPacket(PPPoEInterface const *iface)
- {
- PPPoEPacket packet;
-@@ -941,6 +1068,7 @@ relayGotSessionPacket(PPPoEInterface const *iface)
- #endif
- sendPacket(NULL, sh->interface->sessionSock, &packet, size);
- }
-+#endif
-
- /**********************************************************************
- *%FUNCTION: relayHandlePADT