Trying to recompile mpd5 to override the PPPOE_CONNECT_TIMEOUT
-
@aelakkad said in Trying to recompile mpd5 to override the PPPOE_CONNECT_TIMEOUT:
Here is the problem, I cloned the git, went into /net/mpd5/ and edited the Makefile to this, added "PPPOE_CONNECT_TIMEOUT= 30" towards the end:
That's not the correct procedure. You can't fix it by editing the Makefile. You will need to actually extract the full C source code file tree, modify the applicable C source code file, creat a
diff
patch file of the changes, and then add that new patch file to thefiles
sub-directory in the port's tree. Then when you compile and link the new package it will contain the change you desire.You will need to know how to code in the C language to pull this off. I'm pretty sure it can't be done by adding one line to the Makefile.
And "no", I'm sorry but I can't tell you which exact source file to edit. I just know the process of making changes to the source code of ports. It starts by downloading the C source code archive from the URL specified in the Makefile you have. You can also use tools on your ports builder machine to do this step.
Edit: found one of your posts on the FreeBSD forum here: https://forums.freebsd.org/threads/override-mpd-pppoe-client-timeout.90413/. You need to fully follow the instructions there. From your writeup above, it appears you misunderstood the steps. For starters, you edited the wrong file.
-
-
@bmeeks Yeah, I guess I got it wrong. They just don't appear to have the same file structure, so I am a little confused and don't know how to apply the same thing to the pfsense port of mpd5. Also, I found out (correct me if I'm wrong) pfsense doesn't include the make command, so if I get this working on another VM, I'll have a hard time getting it into pfsense afterwards, do I run make package and then add in pfsense? or I should copy it there? I've been trying to get this working for almost a month now and it's been very hard to find something that helps or could guide me through it and all for what I really think is something really simple (may my ISP burn in hell for the stupid slow infrastructure, they literally admitted they can't get it faster than 12-15 seconds) :/ I sure did learn some stuff along the way tho
-
@aelakkad said in Trying to recompile mpd5 to override the PPPOE_CONNECT_TIMEOUT:
@bmeeks Yeah, I guess I got it wrong. They just don't appear to have the same file structure, so I am a little confused and don't know how to apply the same thing to the pfsense port of mpd5. Also, I found out (correct me if I'm wrong) pfsense doesn't include the make command, so if I get this working on another VM, I'll have a hard time getting it into pfsense afterwards, do I run make package and then add in pfsense? or I should copy it there? I've been trying to get this working for almost a month now and it's been very hard to find something that helps or could guide me through it and all for what I really think is something really simple (may my ISP burn in hell for the stupid slow infrastructure, they literally admitted they can't get it faster than 12-15 seconds) :/ I sure did learn some stuff along the way tho
You can't do any of the fixes required on your pfSense box. It does not have a FreeBSD development environment installed (and you should never attempt to add one to it).
You will need to create a completely separate FreeBSD development system . You can do this by creating a virtual machine on some other hardware host, or you can construct one on bare metal using a spare piece of hardware.
It appears you have never compiled and linked code on FreeBSD. You have a lot to learn in order to pull this off. You absolutely cannot do this by editing a single file. It is a multi-step process involving lots of files and following a specific process. At the end you can produce either a single binary executable or a complete FreeBSD package. But whichever method you choose requires you to have a build environment whose FreeBSD kernel matches the version used by the pfSense machine you are targeting.
You can start by reading this long thread from the forum: https://forum.netgate.com/topic/169749/pfsense-compile-requirements-for-3rd-party-software. The original poster in that thread needed to customize/patch the
upnpd
deamon in pfSense. You need to accomplish something similar withmpd5
.But unless you have prior experience writing and compiling C source code into executable binary modules, this is not going to be an easy task for you. Your additional questions in the reply to my first post indicate you are not understanding some key concepts -- including how the Ports tree in FreeBSD works. It does not contain all the source code files. It contains only specific patches to the source code tree and then a Makefile that contains the URL where the code compilation and linking process can go to download and then unpack the entire souce code file tree for the package. Once the source code is unpacked into a working directory tree, any applicable patches are applied (those will be found in the
files
subdirectory of the port in the Ports tree), then the source code is compiled and linked into an executable binary. It can also be packged into apkg
compatible package file. At the end of the build process, you can copy either the single binary executable over to your pfSense firewall, or you can create a package and copy it over to the firewall and install it using thepkg
utility along with the requisite command-line arguments. -
@bmeeks Thank you, I appreciate it. I will try to learn and try it out. Thanks again.
-
Mmm, this is not an easy starter edit!
Were you able to get any further?
-
@stephenw10 honestly no.. I went through it and it was pretty hard to get an overview to work with, have to really learn the details and try it out a lot. I'm thinking of going with a double NAT and adding the pfsense appliance as a DMZ to try and mitigate some of the issues that come with double NAT, I actually need to learn how to make it work correctly in a double NAT (in terms of port forwarding if needed and firewall rules). Do you think double NAT is pretty bad?
-
I'm behind triple NAT as I write this.
It's better not to be but most things will work fine with it. Port forwarding is more complex. UPnP will not work.
-
I saw your :
Thank you! I will try it out, appreciate it a lot!
and it can be done.
In the future, you'll be posting back here and saying "It wasn't worth it".What you want is this :
You're in a plain : edit : like us all : as a passenger - , and its really annoying you that it takes the curves to sharply. You want to change that.
No issue at all.
Go for your pilot one engin, multiple engine exams.
Then take commercial plain lessons, and get that one done. Get 1000 hours of experience under the belt, and now you are ready : you are hired by some air company and you are flying that plain yourself, and you're approaching that corner.
Switch of the auto pilot.
Do the flying manually, as you want it to happen.
Done.This scenario will also take you also four years or so, on the average.
An there is no rocket science involved here. Tens of thousands have done exactly done that - me included. [ ok, I admit : took me years ... using X-Plane 12, but now I can actually prepare, take off, cruise, and land a Boeing 738-800 without 'dying'. I've tested myself in a real 'official' Boeing flight simulator ]I'd like to point out a shortcut.
This :
-#define PPPOE_CONNECT_TIMEOUT 9 +#define PPPOE_CONNECT_TIMEOUT 25
means that there is a constant defined in the mpd5 binary that contains the value of "09" decimal, or probably 0x09 hex.
It could be stored in the executable file as .. 09 ... or .... 00 09 ... or 09 00... or 00 00 00 09 ... or 00 00 09 00 ... or 09 00 00 00 .. (8 bits, 16 bits, 32 bits maybe 64 bits ?)
So, "all" you need to do is : open the file in a hex editor (Notepad++ can do the job) and change that "9" value to "19".The only thing you have to do is : find the correct place - the correct 0x09 to change.
What you'll be seeing : you have the original C language at your disposal, as it is "open source" so accessible for everybody.
Initially, you could use a disassemble program like ghidra so you know in what part of the code you have to look. Ghidra produces "Intel" processor instructions assembly source files from binary executables,
Intel X86 (probably the 64 version)is world's most used processor, also very open and accessible ***You have to find the processor instructions that were compiled from the source, so you know the exact place of the 0x09 your looking for.
Now use the hex editor, hunt down the same byte sequence, and the 0x09, and change it to 0x19.
Done.
Some hints : the value might be found in the executable code itself, as it is probably part of and "immediate" addressing mode - its not a variable.
If you changed the wrong "09", you'll be good for some spectacular effects.**** well ... it's actually the world's most disgusting instruction set processor. It's a pure mess.
Why ( sniff) wasn't the 68000 any good ? -
Hmm, hard to recommend hex editing the binary!
-
Yeah, while hex editing on a binary can work every now and then, one problem I foresee in this particular case is that the PPPOE_CONNECT_TIMEOUT constant is defined once but then will possibly be used in a several places in the code. Finding all of those would be a tedious exercise. Edit the wrong 0x09 value somewhere and you would create a potentially serious bug.