• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
Netgate Discussion Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login

Setting host-uniq for PPPoE

Scheduled Pinned Locked Moved General pfSense Questions
12 Posts 5 Posters 2.4k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • P
    parithosh
    last edited by parithosh May 26, 2020, 8:12 PM May 26, 2020, 8:12 PM

    My ISP uses the host-uniq part of the PPPoE PADI packet to authenticate the system before any communication. How can I set this value in PfSense?

    1 Reply Last reply Reply Quote 0
    • V
      viktor_g Netgate
      last edited by May 27, 2020, 6:27 AM

      feature request created: https://redmine.pfsense.org/issues/10597

      1 Reply Last reply Reply Quote 0
      • P
        parithosh
        last edited by May 27, 2020, 6:35 AM

        thank you for creating a feature request!

        Is there someway to do this directly through the shell for now? Do you have any insight on which files I should edit using the shell?

        V 1 Reply Last reply May 27, 2020, 9:19 AM Reply Quote 0
        • V
          viktor_g Netgate @parithosh
          last edited by May 27, 2020, 9:19 AM

          @parithosh Can you test this PR https://github.com/pfsense/pfsense/pull/4337 ?
          patch id 7a6a322bf1d6208847722e9a91a6397e266b4d87

          1 Reply Last reply Reply Quote 0
          • P
            parithosh
            last edited by May 27, 2020, 1:53 PM

            Hey!
            Unfortunately I can't connect to the internet from my PfSense machine yet. How can I manually make these changes? From what I read, applying the patch requires internet access.

            V 1 Reply Last reply May 27, 2020, 2:21 PM Reply Quote 0
            • V
              viktor_g Netgate @parithosh
              last edited by May 27, 2020, 2:21 PM

              @parithosh you can copy-paste it:

              From 7a6a322bf1d6208847722e9a91a6397e266b4d87 Mon Sep 17 00:00:00 2001
              From: Viktor G <viktor@netgate.com>
              Date: Wed, 27 May 2020 12:15:18 +0300
              Subject: [PATCH] Setting host-uniq for PPPoE. Implements #10597
              
              ---
               src/etc/inc/interfaces.inc       | 10 ++++++++--
               src/usr/local/www/interfaces.php | 22 ++++++++++++++++++++--
               2 files changed, 28 insertions(+), 4 deletions(-)
              
              diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc
              index a6a9fe60303..7e4a7b4c7ca 100644
              --- a/src/etc/inc/interfaces.inc
              +++ b/src/etc/inc/interfaces.inc
              @@ -2576,7 +2576,13 @@ EOD;
               
               EOD;
               		}
              -		if ($type == "pppoe" && $mtus[$pid] > 1492) {
              +		if (($type == "pppoe") && !empty($ppp['hostuniq'])) {
              +			$mpdconf .= <<<EOD
              +	set host-uniq "0x{$ppp['hostuniq']}"
              +
              +EOD;
              +		}
              +		if (($type == "pppoe") && ($mtus[$pid] > 1492)) {
               			$mpdconf .= <<<EOD
               	set pppoe max-payload {$mtus[$pid]}
               
              @@ -2597,7 +2603,7 @@ EOD;
               EOD;
               		}
               
              -		if ($type == "pptp" || $type == "l2tp") {
              +		if (($type == "pptp") || ($type == "l2tp")) {
               			$mpdconf .= <<<EOD
               	set {$type} self {$localips[$pid]}
               	set {$type} peer {$gateways[$pid]}
              diff --git a/src/usr/local/www/interfaces.php b/src/usr/local/www/interfaces.php
              index cefeab14c91..6b6c498a433 100755
              --- a/src/usr/local/www/interfaces.php
              +++ b/src/usr/local/www/interfaces.php
              @@ -128,10 +128,11 @@ function remove_bad_chars($string) {
               
               		$pconfig['phone'] = $a_ppps[$pppid]['phone'];
               		$pconfig['apn'] = $a_ppps[$pppid]['apn'];
              -	} else if ($a_ppps[$pppid]['type'] == "pppoe") {
              +	} elseif ($a_ppps[$pppid]['type'] == "pppoe") {
               		$pconfig['pppoe_username'] = $a_ppps[$pppid]['username'];
               		$pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']);
               		$pconfig['provider'] = $a_ppps[$pppid]['provider'];
              +		$pconfig['hostuniq'] = $a_ppps[$pppid]['hostuniq'];
               		$pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
               		$pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout'];
               
              @@ -843,9 +844,12 @@ interfaces_vlan_configure();
               		}
               	}
               
              -	if (($_POST['provider'] && (strpos($_POST['provider'], "\"")))) {
              +	if ($_POST['provider'] && strpos($_POST['provider'], "\"")) {
               		$input_errors[] = gettext("The service name may not contain quote characters.");
               	}
              +	if ($_POST['hostuniq'] && !ctype_xdigit($_POST['hostuniq'])) {
              +		$input_errors[] = gettext("The Host-Uniq field must contain hexadecimal string, for example '6d792d746167'.");
              +	}
               	if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) {
               		$input_errors[] = gettext("The idle timeout value must be an integer.");
               	}
              @@ -1175,6 +1179,7 @@ interfaces_vlan_configure();
               		unset($wancfg['pptp_password']);
               		unset($wancfg['l2tp_secret']);
               		unset($wancfg['provider']);
              +		unset($wancfg['hostuniq']);
               		unset($wancfg['ondemand']);
               		unset($wancfg['timeout']);
               		if (empty($wancfg['pppoe']['pppoe-reset-type'])) {
              @@ -1197,6 +1202,7 @@ interfaces_vlan_configure();
               			}
               			if ($wancfg['ipaddr'] != 'pppoe') {
               				unset($a_ppps[$pppid]['pppoe-reset-type']);
              +				unset($a_ppps[$pppid]['hostuniq']);
               			}
               			if ($wancfg['type'] != $_POST['type']) {
               				unset($a_ppps[$pppid]['idletimeout']);
              @@ -1286,6 +1292,11 @@ interfaces_vlan_configure();
               				} else {
               					$a_ppps[$pppid]['provider'] = true;
               				}
              +				if (!empty($_POST['hostuniq'])) {
              +					$a_ppps[$pppid]['hostuniq'] = strtolower($_POST['hostuniq']);
              +				} else {
              +					$a_ppps[$pppid]['hostuniq'] = true;
              +				}
               				$a_ppps[$pppid]['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false;
               				if (!empty($_POST['pppoe_idletimeout'])) {
               					$a_ppps[$pppid]['idletimeout'] = $_POST['pppoe_idletimeout'];
              @@ -2837,6 +2848,13 @@ function build_port_list() {
               	$pconfig['provider']
               ))->setHelp('This field can usually be left empty.');
               
              +$section->addInput(new Form_Input(
              +	'hostuniq',
              +	'Host-Uniq',
              +	'text',
              +	$pconfig['hostuniq']
              +))->setHelp('Required by some ISP, usually can be left empty.');
              +
               $section->addInput(new Form_Checkbox(
               	'pppoe_dialondemand',
               	'Dial on demand',
              
              1 Reply Last reply Reply Quote 0
              • P
                parithosh
                last edited by May 27, 2020, 6:11 PM

                So i copied over the snippet, applied it with patch onto the files /etc/inc/interfaces.inc and /usr/local/www/interfaces.php. This created the host-uniq field in the WAN page under PPPoE as shown in the image. I entered the same value as your example.

                WAN-Page.png

                However, when I run tcpdump on the VLAN7 interface (needed by the ISP), then I still get random values under host-uniq and none of them being the value I set.

                tcpdump-host-uniq.jpg

                Is there someway I can check if it has been applied correctly? (I did hit save and Apply changes already).

                V 1 Reply Last reply May 28, 2020, 6:51 AM Reply Quote 0
                • V
                  viktor_g Netgate @parithosh
                  last edited by May 28, 2020, 6:51 AM

                  @parithosh PR updated, now it works correctly and I can see Host-Uniq value in packet capture:

                  From 714657088f4c60cdfcf5b77c17097c0e9e5acd6b Mon Sep 17 00:00:00 2001
                  From: Viktor G <viktor@netgate.com>
                  Date: Thu, 28 May 2020 09:46:01 +0300
                  Subject: [PATCH] Setting host-uniq for PPPoE. Implements #10597
                  
                  ---
                   src/etc/inc/interfaces.inc       | 14 +++++++++++---
                   src/usr/local/www/interfaces.php | 22 ++++++++++++++++++++--
                   2 files changed, 31 insertions(+), 5 deletions(-)
                  
                  diff --git a/src/etc/inc/interfaces.inc b/src/etc/inc/interfaces.inc
                  index a6a9fe60303..9a43abc9408 100644
                  --- a/src/etc/inc/interfaces.inc
                  +++ b/src/etc/inc/interfaces.inc
                  @@ -2569,14 +2569,22 @@ EOD;
                   EOD;
                   		}
                   		if ($type == "pppoe") {
                  +			$hostuniq = '';
                  +			if (!empty($ppp['hostuniq'])) {
                  +				if (preg_match('/^0x[a-fA-F0-9]+$/', $ppp['hostuniq'])) {
                  +					$hostuniq = strtolower($ppp['hostuniq']) .'|';
                  +				} elseif (preg_match('/^[a-zA-Z0-9]+$/i', $ppp['hostuniq'])) {
                  +					$hostuniq = '0x' . bin2hex($ppp['hostuniq']) . '|';
                  +				}
                  +			}
                   			// Send a null service name if none is set.
                   			$provider = isset($ppp['provider']) ? $ppp['provider'] : "";
                   			$mpdconf .= <<<EOD
                  -	set pppoe service "{$provider}"
                  +	set pppoe service "{$hostuniq}{$provider}"
                   
                   EOD;
                   		}
                  -		if ($type == "pppoe" && $mtus[$pid] > 1492) {
                  +		if (($type == "pppoe") && ($mtus[$pid] > 1492)) {
                   			$mpdconf .= <<<EOD
                   	set pppoe max-payload {$mtus[$pid]}
                   
                  @@ -2597,7 +2605,7 @@ EOD;
                   EOD;
                   		}
                   
                  -		if ($type == "pptp" || $type == "l2tp") {
                  +		if (($type == "pptp") || ($type == "l2tp")) {
                   			$mpdconf .= <<<EOD
                   	set {$type} self {$localips[$pid]}
                   	set {$type} peer {$gateways[$pid]}
                  diff --git a/src/usr/local/www/interfaces.php b/src/usr/local/www/interfaces.php
                  index cefeab14c91..77b4f8c5654 100755
                  --- a/src/usr/local/www/interfaces.php
                  +++ b/src/usr/local/www/interfaces.php
                  @@ -128,10 +128,11 @@ function remove_bad_chars($string) {
                   
                   		$pconfig['phone'] = $a_ppps[$pppid]['phone'];
                   		$pconfig['apn'] = $a_ppps[$pppid]['apn'];
                  -	} else if ($a_ppps[$pppid]['type'] == "pppoe") {
                  +	} elseif ($a_ppps[$pppid]['type'] == "pppoe") {
                   		$pconfig['pppoe_username'] = $a_ppps[$pppid]['username'];
                   		$pconfig['pppoe_password'] = base64_decode($a_ppps[$pppid]['password']);
                   		$pconfig['provider'] = $a_ppps[$pppid]['provider'];
                  +		$pconfig['hostuniq'] = $a_ppps[$pppid]['hostuniq'];
                   		$pconfig['pppoe_dialondemand'] = isset($a_ppps[$pppid]['ondemand']);
                   		$pconfig['pppoe_idletimeout'] = $a_ppps[$pppid]['idletimeout'];
                   
                  @@ -843,9 +844,12 @@ interfaces_vlan_configure();
                   		}
                   	}
                   
                  -	if (($_POST['provider'] && (strpos($_POST['provider'], "\"")))) {
                  +	if ($_POST['provider'] && strpos($_POST['provider'], "\"")) {
                   		$input_errors[] = gettext("The service name may not contain quote characters.");
                   	}
                  +	if ($_POST['hostuniq'] && !preg_match('/^[a-zA-Z0-9]+$/i', $_POST['hostuniq'])) {
                  +		$input_errors[] = gettext("The Host-Uniq value can only be hexadecimal or letters and numbers.");
                  +	}
                   	if (($_POST['pppoe_idletimeout'] != "") && !is_numericint($_POST['pppoe_idletimeout'])) {
                   		$input_errors[] = gettext("The idle timeout value must be an integer.");
                   	}
                  @@ -1175,6 +1179,7 @@ interfaces_vlan_configure();
                   		unset($wancfg['pptp_password']);
                   		unset($wancfg['l2tp_secret']);
                   		unset($wancfg['provider']);
                  +		unset($wancfg['hostuniq']);
                   		unset($wancfg['ondemand']);
                   		unset($wancfg['timeout']);
                   		if (empty($wancfg['pppoe']['pppoe-reset-type'])) {
                  @@ -1197,6 +1202,7 @@ interfaces_vlan_configure();
                   			}
                   			if ($wancfg['ipaddr'] != 'pppoe') {
                   				unset($a_ppps[$pppid]['pppoe-reset-type']);
                  +				unset($a_ppps[$pppid]['hostuniq']);
                   			}
                   			if ($wancfg['type'] != $_POST['type']) {
                   				unset($a_ppps[$pppid]['idletimeout']);
                  @@ -1286,6 +1292,11 @@ interfaces_vlan_configure();
                   				} else {
                   					$a_ppps[$pppid]['provider'] = true;
                   				}
                  +				if (!empty($_POST['hostuniq'])) {
                  +					$a_ppps[$pppid]['hostuniq'] = strtolower($_POST['hostuniq']);
                  +				} else {
                  +					$a_ppps[$pppid]['hostuniq'] = true;
                  +				}
                   				$a_ppps[$pppid]['ondemand'] = $_POST['pppoe_dialondemand'] ? true : false;
                   				if (!empty($_POST['pppoe_idletimeout'])) {
                   					$a_ppps[$pppid]['idletimeout'] = $_POST['pppoe_idletimeout'];
                  @@ -2837,6 +2848,13 @@ function build_port_list() {
                   	$pconfig['provider']
                   ))->setHelp('This field can usually be left empty.');
                   
                  +$section->addInput(new Form_Input(
                  +	'hostuniq',
                  +	'Host-Uniq',
                  +	'text',
                  +	$pconfig['hostuniq']
                  +))->setHelp('A unique host tag value for this PPPoE client. Leave blank unless a value is required by the service provider.');
                  +
                   $section->addInput(new Form_Checkbox(
                   	'pppoe_dialondemand',
                   	'Dial on demand',
                  
                  1 Reply Last reply Reply Quote 0
                  • P
                    parithosh
                    last edited by May 29, 2020, 7:01 AM

                    Thank you so much! That works exactly as expected. I seem to still not receive any response to my PADI packet, but i am clarifying with my ISP if something more is required.

                    1 Reply Last reply Reply Quote 0
                    • F
                      febu
                      last edited by Oct 24, 2022, 7:35 PM

                      I need the VLAN7 interface (needed by the ISP), too. How do I convert it into hex?

                      1 Reply Last reply Reply Quote 0
                      • stephenw10S
                        stephenw10 Netgate Administrator
                        last edited by Oct 24, 2022, 7:52 PM

                        The host-uniq ID has nothing to do with the VLAN. If your ISP needs a VLAN create the that and then use the VLAN interface as the parent for the PPPoE config.

                        Steve

                        R 1 Reply Last reply Oct 24, 2022, 8:00 PM Reply Quote 1
                        • R
                          rcoleman-netgate Netgate @stephenw10
                          last edited by rcoleman-netgate Oct 24, 2022, 8:01 PM Oct 24, 2022, 8:00 PM

                          @febu see

                          405070ad-8da8-468b-b50d-7634b0cb8dfd-image.png

                          Ryan
                          Repeat, after me: MESH IS THE DEVIL! MESH IS THE DEVIL!
                          Requesting firmware for your Netgate device? https://go.netgate.com
                          Switching: Mikrotik, Netgear, Extreme
                          Wireless: Aruba, Ubiquiti

                          1 Reply Last reply Reply Quote 2
                          • First post
                            Last post
                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
                            This community forum collects and processes your personal information.
                            consent.not_received