From: Michael Tremer <michael.tremer@ipfire.org>
To: Bernhard Bitsch <bbitsch@ipfire.org>
Cc: development@lists.ipfire.org
Subject: Re: [PATCH 1/5] hostapd: Bring back support for 802.11g/a
Date: Thu, 22 Jan 2026 11:14:10 +0000 [thread overview]
Message-ID: <9AB06F6F-F2D7-423F-A662-3AC2992373CD@ipfire.org> (raw)
In-Reply-To: <163650f3-3968-434e-8cef-fb2405e5a45f@ipfire.org>
Hello Bernhard,
Thank you very much for reviewing this patch set.
Did you also run the scripts?
-Michael
> On 21 Jan 2026, at 19:46, Bernhard Bitsch <bbitsch@ipfire.org> wrote:
>
> Reviewed-by: Bernhard Bitsch <bbitsch@ipfire.org>
>
> Am 19.01.2026 um 17:21 schrieb Michael Tremer:
>> I just have a little bit of easily accessible testing hardware in form
>> of USB devices which are very suitable for testing, but the one that I
>> found in my drawer doesn't support 802.11n.
>> Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
>> ---
>> doc/language_issues.de | 2 ++
>> doc/language_issues.en | 2 ++
>> doc/language_issues.es | 2 ++
>> doc/language_issues.fr | 2 ++
>> doc/language_issues.it | 2 ++
>> doc/language_issues.nl | 2 ++
>> doc/language_issues.pl | 2 ++
>> doc/language_issues.ru | 2 ++
>> doc/language_issues.tr | 2 ++
>> doc/language_issues.tw | 2 ++
>> doc/language_issues.zh | 2 ++
>> doc/language_missings | 20 ++++++++++++++++++++
>> html/cgi-bin/wlanap.cgi | 8 +++++++-
>> langs/en/cgi-bin/en.pl | 2 ++
>> src/initscripts/packages/hostapd | 15 +++++++++++++--
>> 15 files changed, 64 insertions(+), 3 deletions(-)
>> diff --git a/doc/language_issues.de b/doc/language_issues.de
>> index 008b9520f..1795ec5af 100644
>> --- a/doc/language_issues.de
>> +++ b/doc/language_issues.de
>> @@ -1210,6 +1210,8 @@ WARNING: untranslated string: wio_webinterface_link = unknown string
>> WARNING: untranslated string: wireguard = WireGuard
>> WARNING: untranslated string: wlan client encryption wpa3 = WPA3
>> WARNING: untranslated string: wlan client management frame protection = Management Frame Protection
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11w disabled = Disabled
>> WARNING: untranslated string: wlanap 802.11w enforced = Enforced
>> WARNING: untranslated string: wlanap 802.11w optional = Optional
>> diff --git a/doc/language_issues.en b/doc/language_issues.en
>> index 6ea0f1963..30e2fbcce 100644
>> --- a/doc/language_issues.en
>> +++ b/doc/language_issues.en
>> @@ -2408,6 +2408,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.es b/doc/language_issues.es
>> index 48dfffa7e..980d27874 100644
>> --- a/doc/language_issues.es
>> +++ b/doc/language_issues.es
>> @@ -1250,6 +1250,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.fr b/doc/language_issues.fr
>> index 65b3838d0..a7c31beaf 100644
>> --- a/doc/language_issues.fr
>> +++ b/doc/language_issues.fr
>> @@ -1301,6 +1301,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.it b/doc/language_issues.it
>> index 5214abda2..10e77143f 100644
>> --- a/doc/language_issues.it
>> +++ b/doc/language_issues.it
>> @@ -1652,6 +1652,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.nl b/doc/language_issues.nl
>> index d3f814785..5d56a5ca2 100644
>> --- a/doc/language_issues.nl
>> +++ b/doc/language_issues.nl
>> @@ -1672,6 +1672,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.pl b/doc/language_issues.pl
>> index 24b5429ef..7a1128c20 100644
>> --- a/doc/language_issues.pl
>> +++ b/doc/language_issues.pl
>> @@ -1920,6 +1920,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.ru b/doc/language_issues.ru
>> index 0682bfd6f..b6320fd30 100644
>> --- a/doc/language_issues.ru
>> +++ b/doc/language_issues.ru
>> @@ -1919,6 +1919,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.tr b/doc/language_issues.tr
>> index 2ef6920ac..2ad1bf054 100644
>> --- a/doc/language_issues.tr
>> +++ b/doc/language_issues.tr
>> @@ -1522,6 +1522,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.tw b/doc/language_issues.tw
>> index 73e116b7c..c676ffa52 100644
>> --- a/doc/language_issues.tw
>> +++ b/doc/language_issues.tw
>> @@ -1268,6 +1268,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_issues.zh b/doc/language_issues.zh
>> index 73e116b7c..c676ffa52 100644
>> --- a/doc/language_issues.zh
>> +++ b/doc/language_issues.zh
>> @@ -1268,6 +1268,8 @@ WARNING: untranslated string: wlanap 802.11ac 160mhz = IEEE 802.11ac @ 160 MHz
>> WARNING: untranslated string: wlanap 802.11ac 20mhz = IEEE 802.11ac @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11ac 40mhz = IEEE 802.11ac @ 40 MHz
>> WARNING: untranslated string: wlanap 802.11ac 80mhz = IEEE 802.11ac @ 80 MHz
>> +WARNING: untranslated string: wlanap 802.11ag = IEEE 802.11a/g
>> +WARNING: untranslated string: wlanap 802.11ag 20mhz = IEEE802.11a/g @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn = IEEE 802.11an/gn
>> WARNING: untranslated string: wlanap 802.11agn 20mhz = IEEE 802.11an/gn @ 20 MHz
>> WARNING: untranslated string: wlanap 802.11agn 40mhz = IEEE 802.11an/gn @ 40 MHz
>> diff --git a/doc/language_missings b/doc/language_missings
>> index 1d435f16f..268add65b 100644
>> --- a/doc/language_missings
>> +++ b/doc/language_missings
>> @@ -141,6 +141,8 @@
>> < wg pre-shared key (optional)
>> < winbind daemon
>> < wireguard
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11w disabled
>> < wlanap 802.11w enforced
>> < wlanap 802.11w optional
>> @@ -217,6 +219,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -398,6 +402,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -1040,6 +1046,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -1754,6 +1762,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -2882,6 +2892,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -4048,6 +4060,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -4591,6 +4605,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -4727,6 +4743,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> @@ -4828,6 +4846,8 @@
>> < wlanap 802.11ac 20mhz
>> < wlanap 802.11ac 40mhz
>> < wlanap 802.11ac 80mhz
>> +< wlanap 802.11ag
>> +< wlanap 802.11ag 20mhz
>> < wlanap 802.11agn
>> < wlanap 802.11agn 20mhz
>> < wlanap 802.11agn 40mhz
>> diff --git a/html/cgi-bin/wlanap.cgi b/html/cgi-bin/wlanap.cgi
>> index 0d1c5a90b..0c5dad558 100644
>> --- a/html/cgi-bin/wlanap.cgi
>> +++ b/html/cgi-bin/wlanap.cgi
>> @@ -102,7 +102,7 @@ if ($cgiparams{'ACTION'} eq "$Lang::tr{'save'}") {
>> }
>> # Validate MODE
>> - unless ($cgiparams{'MODE'} =~ m/^(HT|HE|VHT|EHT)(20|40|80|160|320)$/) {
>> + unless ($cgiparams{'MODE'} =~ m/^(|HT|HE|VHT|EHT)(20|40|80|160|320)$/) {
>> $errormessage .= "$Lang::tr{'wlanap invalid mode'}<br />";
>> }
>> @@ -343,6 +343,12 @@ print <<END;
>> $Lang::tr{'wlanap 802.11agn 20mhz'}
>> </option>
>> </optgroup>
>> +
>> + <optgroup label="$Lang::tr{'wlanap 802.11ag'}">
>> + <option value="20" $selected{'MODE'}{'20'}>
>> + $Lang::tr{'wlanap 802.11ag 20mhz'}
>> + </option>
>> + </optgroup>
>> </select>
>> </td>
>> </tr>
>> diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl
>> index 79a512498..dda3e8d5b 100644
>> --- a/langs/en/cgi-bin/en.pl
>> +++ b/langs/en/cgi-bin/en.pl
>> @@ -3202,6 +3202,8 @@
>> 'wlanap 802.11ac 20mhz' => 'IEEE 802.11ac @ 20 MHz',
>> 'wlanap 802.11ac 40mhz' => 'IEEE 802.11ac @ 40 MHz',
>> 'wlanap 802.11ac 80mhz' => 'IEEE 802.11ac @ 80 MHz',
>> +'wlanap 802.11ag' => 'IEEE 802.11a/g',
>> +'wlanap 802.11ag 20mhz' => 'IEEE802.11a/g @ 20 MHz',
>> 'wlanap 802.11agn' => 'IEEE 802.11an/gn',
>> 'wlanap 802.11agn 20mhz' => 'IEEE 802.11an/gn @ 20 MHz',
>> 'wlanap 802.11agn 40mhz' => 'IEEE 802.11an/gn @ 40 MHz',
>> diff --git a/src/initscripts/packages/hostapd b/src/initscripts/packages/hostapd
>> index 5384badab..9bb6a2120 100644
>> --- a/src/initscripts/packages/hostapd
>> +++ b/src/initscripts/packages/hostapd
>> @@ -360,6 +360,15 @@ write_config() {
>> # Always enable WMM
>> echo "wmm_enabled=1"
>> + # 802.11n
>> + local enable_n=0
>> +
>> + case "${MODE}" in
>> + HT*|VHT*|HE*|EHT*)
>> + enable_n=1
>> + ;;
>> + esac
>> +
>> # 802.11ac
>> local enable_ac=0
>> local vht_oper_chwidth=0
>> @@ -507,8 +516,10 @@ write_config() {
>> fi
>> fi
>> - # Always enable 802.11n
>> - echo "ieee80211n=1"
>> + # Enable 802.11n?
>> + if [ "${enable_n}" -eq 1 ]; then
>> + echo "ieee80211n=1"
>> + fi
>> # Set HT capabilities
>> if [ ${#ht_caps[@]} -gt 0 ]; then
>
>
prev parent reply other threads:[~2026-01-22 11:14 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-19 16:21 Michael Tremer
2026-01-19 16:21 ` [PATCH 2/5] hostapd: Use the new readhash implementation to read configuration files Michael Tremer
2026-01-21 19:58 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 3/5] readhash: Fix the quote check Michael Tremer
2026-01-21 20:00 ` Bernhard Bitsch
2026-01-19 16:21 ` [PATCH 4/5] initscripts: functions: Permit ! in the value of key/value files Michael Tremer
2026-01-19 16:21 ` [PATCH 5/5] hostapd: Bump package version Michael Tremer
2026-01-21 19:46 ` [PATCH 1/5] hostapd: Bring back support for 802.11g/a Bernhard Bitsch
2026-01-22 11:14 ` Michael Tremer [this message]
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=9AB06F6F-F2D7-423F-A662-3AC2992373CD@ipfire.org \
--to=michael.tremer@ipfire.org \
--cc=bbitsch@ipfire.org \
--cc=development@lists.ipfire.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox