DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Min Hu (Connor)" <humin29@huawei.com>
To: Andrew Rybchenko <arybchenko@solarflare.com>, <dev@dpdk.org>
Cc: <konstantin.ananyev@intel.com>, <thomas@monjalon.net>,
	<ferruh.yigit@intel.com>, <linuxarm@huawei.com>
Subject: Re: [dpdk-dev] [PATCH V9 1/3] ethdev: introduce FEC API
Date: Thu, 24 Sep 2020 19:07:52 +0800	[thread overview]
Message-ID: <dc391949-661e-2317-21b2-a39c5af837a7@huawei.com> (raw)
In-Reply-To: <5c8ba025-3c55-637c-0a0c-e99644f33d83@solarflare.com>

Hi, Andrew,
	I have fixed it about FEC in V11 according to your suggestion.
	could your please check it out.

	thanks.

在 2020/9/22 20:18, Andrew Rybchenko 写道:
> On 9/22/20 2:06 PM, Min Hu (Connor) wrote:
>>
>>
>> 在 2020/9/22 16:02, Andrew Rybchenko 写道:
>>> On 9/22/20 7:58 AM, Min Hu (Connor) wrote:
>>>>
>>>>
>>>> 在 2020/9/21 21:39, Andrew Rybchenko 写道:
>>>>> On 9/21/20 9:13 AM, Min Hu (Connor) wrote:
>>>>>> This patch adds Forward error correction(FEC) support for ethdev.
>>>>>> Introduce APIs which support query and config FEC information in
>>>>>> hardware.
>>>>>>
>>>>>> Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
>>>>>> Reviewed-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
>>>>>> Reviewed-by: Chengwen Feng <fengchengwen@huawei.com>
>>>>>> Reviewed-by: Chengchang Tang <tangchengchang@huawei.com>
>>>>>> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
>>>>>> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
> 
> [snip]
> 
>>>>>> @@ -3328,6 +3349,70 @@ int  rte_eth_led_on(uint16_t port_id);
>>>>>>     int  rte_eth_led_off(uint16_t port_id);
>>>>>>       /**
>>>>>> + * @warning
>>>>>> + * @b EXPERIMENTAL: this API may change, or be removed, without
>>>>>> prior notice
>>>>>> + *
>>>>>> + * Get Forward Error Correction(FEC) capability.
>>>>>> + *
>>>>>> + * @param port_id
>>>>>> + *   The port identifier of the Ethernet device.
>>>>>> + * @param fec_cap
>>>>>> + *   returns the FEC capability from the device, as follows:
>>>>>> + *   RTE_ETH_FEC_CAPA_NOFEC
>>>>>> + *   RTE_ETH_FEC_CAPA_AUTO
>>>>>> + *   RTE_ETH_FEC_CAPA_BASER
>>>>>> + *   RTE_ETH_FEC_CAPA_RS
>>>>>> + * @return
>>>>>> + *   - (0) if successful.
>>>>>> + *   - (-ENOTSUP) if underlying hardware OR driver doesn't support.
>>>>>> + *     that operation.
>>>>>> + *   - (-EIO) if device is removed.
>>>>>> + *   - (-ENODEV)  if *port_id* invalid.
>>>>>> + */
>>>>>> +__rte_experimental
>>>>>> +int rte_eth_fec_get_capability(uint16_t port_id, uint32_t *fec_cap);
>>>>>
>>>>> The API does not allow to report capabilities per link speed:
>>>>> which FEC mode is supported at which link speed?
>>>>>
>>>>> What about something like:
>>>>>
>>>>> struct rte_eth_fec_capa {
>>>>>      uint32_t speed; /**< Link speed (see ETH_SPEED_NUM_*) */
>>>>>      uint32_t capa;  /**< FEC capabilities bitmask (see
>>>>> RTE_FEC_CAPA_*) */
>>>>> };
>>>>>
>>>>> __rte_experimental
>>>>> int rte_eth_fec_get_capability(uint16_t port_id, uint32_t *num, struct
>>>>> rte_eth_fec_capa *speed_capa);
>>>>>
>>>>> where:
>>>>>     - num is in/out with a number of elements in an array
>>>>>     - speed_capa is out only with per-speed capabilities
>>>>>
>>>> There is no need to report capabilities per link speed, because
>>>> relastionship between the link speed and fec mode is fixed. The
>>>> infomations can be referred to in official documents or internet.
>>>
>>> Should an application download documents and search for it? :)
>>
>> OK, I will report capabilities per link speed in V11.
>> By the way,
>>>>> where:
>>>>>      - num is in/out with a number of elements in an array
>>
>> could you describe "num" more detailedly, how to use this value?
> 
> On input, num should specify a number of elements in speed_capa
> array provided by the caller to get FEC capabilities.
> If the number is insufficient to, error should be returned and
> the number should contain required number of elements.
> If sufficient, on output driver should return a number of
> filled in array elements.
> 
>>>
>>>>
>>>> A ethernet port may have various link speed in diffrent situations(for
>>>> example, optical module with different speed is used). But we do not
>>>> care about capabilities per link speed. We only care about FEC capa of
>>>> the ethernet device at a specific moment, because set FEC mode also
>>>> depend on the current FEC capa.
>>>
>>> Capabilities should not be for a specific moment. Capabilities
>>> should be fixed and stable (if transceiver is not replaced).
>>> Capabilities should not depend on a link speed or link status.
>>> Otherwise an application can't use it in a reliable way.
>>>
>>>>
>>>> By the way, we can also get link speed of the device by API
>>>> "rte_eth_link_get" in the same time.
>>>>
>>>> thanks.
>>>>
>>>>>> +
>>>>>> +/**
>>>>>> + * @warning
>>>>>> + * @b EXPERIMENTAL: this API may change, or be removed, without
>>>>>> prior notice
>>>>>> + *
>>>>>> + * Get current Forward Error Correction(FEC) mode.
>>>>>> + *
>>>>>> + * @param port_id
>>>>>> + *   The port identifier of the Ethernet device.
>>>>>> + * @param mode
>>>>>> + *   returns the FEC mode from the device.
>>>>>> + * @return
>>>>>> + *   - (0) if successful.
>>>>>> + *   - (-ENOTSUP) if underlying hardware OR driver doesn't support.
>>>>>> + *     that operation.
>>>>>> + *   - (-EIO) if device is removed.
>>>>>> + *   - (-ENODEV)  if *port_id* invalid.
>>>>>> + */
>>>>>> +__rte_experimental
>>>>>> +int rte_eth_fec_get(uint16_t port_id, enum rte_eth_fec_mode *mode);
>>>>>
>>>>> Please, specify what should be reported if link is down.
>>>>> E.g. if set to RS, but link is down.
>>>>>
>>>>> Does AUTO make sense here?
>>>>>
>>>> OK, I will add the information in the function header comment:
>>>> when link down,None AUTO mode(RS, BASER. NOFEC) keep as it is when link
>>>> up, AUTO mode will change from rs,baser to nofec when quering the mode.
>>>
>>> I'll take a look at the patch, above text is hardly readable.
> 
>> (1). If the current mode of device is one of these modes:
>> RS, BASER. NOFEC.
>> when link up, for example, the mode is RS. when the device is linked
>> down, the mode is always RS.
> 
>> (2). If the current mode of device is AUTO:
>> when the device is linked down, the mode varies in this order:
>> rs->baser->nofec, until Auto-negotiation success (link shoud be
>> up first).
>>
>> But this is defined in our hardware. I think the first feature(1) are
>> common and can be adopted.
> 
> Sorry, I don't understand.
> What abgot if link is down and AUTO is enabled, AUTO is
> returned, otherwise, configured FEC mode is returned.
> If link is up, current FEC mode is returned (i.e. not AUTO,
> either NOFEC, or RS, or BASER).
> 
>>>>>> +
>>>>>> +/**
>>>>>> + * @warning
>>>>>> + * @b EXPERIMENTAL: this API may change, or be removed, without
>>>>>> prior notice
>>>>>> + *
>>>>>> + * Set Forward Error Correction(FEC) mode.
>>>>>> + *
>>>>>> + * @param port_id
>>>>>> + *   The port identifier of the Ethernet device.
>>>>>> + * @param mode
>>>>>> + *   the FEC mode.
>>>>>> + * @return
>>>>>> + *   - (0) if successful.
>>>>>> + *   - (-EINVAL) if the FEC mode is not valid.
>>>>>> + *   - (-ENOTSUP) if underlying hardware OR driver doesn't support.
>>>>>> + *   - (-EIO) if device is removed.
>>>>>> + *   - (-ENODEV)  if *port_id* invalid.
>>>>>> + */
>>>>>> +__rte_experimental
>>>>>> +int rte_eth_fec_set(uint16_t port_id, enum rte_eth_fec_mode mode);
>>>>>
>>>>> It does not allow to tweak autoneg facilities.
>>>>> E.g. "I know that RS is buggy, so I want to exclude it from
>>>>> auto-negotiation".
>>>>> So, I suggest to change mode to capa bitmask.
>>>>> If AUTO is set, other bits may be set and specify allowed
>>>>> options. E.g. AUTO|RS|BASER will require FEC, i.e. NOFEC is
>>>> The two FEC modes cannot be configured for hardware at the same time,
>>>> including AUTO and other FEC modes. This is determined by Hardware
>>>> itself.
>>>
>>> Which HW? Yours? If so, it does not matter. The patch adds
>>> generic API. My comments are not abstract thoughts. There
>>> are requirements and capabilities behind.
>>
>> yes, it is in my HW. But I think the feature of FEC will exist in other
>> HW: the two FEC modes cannot be configured for hardware at the same time.
>> By the way, if set two FEC mode in our HW, the result will be unknown.
>> I also test X710 nic device, it does not support that feature.
>> I do not support that solutions. thanks.
> 
> I'm not trying to say that two FEC modes could be running
> simultaneously. I'm trying to say that in the future a PHY
> could support more than one FEC mode and autonegotiation
> could make a choice which FEC mode to use.
> E.g.
> NOFEC, FOO and BAR modes supported
> set (AUTO|FOO|BAR) will require either FOO or BAR to be
> negotiated and does not allow NOFEC.
> 
>>>> Thanks.
>>>>
>>>>> not allowed. If just RS, it means that auto-negotiation is
>>>>> disabled and RS must be used.
>>>>> If AUTO is unset, only one bit may be set in capabilities.
>>>>> Since we don't do it per speed, I think it is safe to ignore
>>>>> unsupported mode bits. I.e. do not return error if unsupported
>>>>> capa is requested to together with AUTO, however it could be
>> Why? if the mode is unsupported (not in capa),why we can configure
>> the the mode to the device? Because this is unreaonable. Also,
>> the configure will not be ineffective, and the hardware will return
>> error back to the driver.
> 
> I agree that requested mode should be in capabilities for at
> least some speed, but not required to be applicable to
> currently negotiated and running speed. May be it is obvious.
> I.e. if I set AUTO|NOFEC|RS when capabilities are
> 25G(NOFEC,AUTO,BASER) and 100G(NOFEC,AUTO,RS), it will
> enforce NOFEC for 25G (since BASER is disabled) and allow
> either NOFEC or RS for 100G.
> 
>>>>> a problem if no modes are allowed for negotiated link speed.
>>>>> Thoughts are welcome.
>>>>>
>>>>>> +
>>>>>> +/**
>>>>>>      * Get current status of the Ethernet link flow control for
>>>>>> Ethernet device
>>>>>>      *
>>>>>>      * @param port_id
>>>>>
>>>>> [snip]
>>>>>
>>>>> .
>>>>>
>>>
>>> .
>>>
> 
> .
> 

  reply	other threads:[~2020-09-24 11:08 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-28 11:32 [dpdk-dev] [RFC] ethdev: add Forward Error Correction support Min Hu(Connor)
2020-08-30 12:43 ` Andrew Rybchenko
2020-09-08  3:05 ` [dpdk-dev] [PATCH 0/3] add FEC support Min Hu (Connor)
2020-09-08  3:05   ` [dpdk-dev] [PATCH 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-09  2:42     ` [dpdk-dev] [PATCH V2 0/3] add FEC support Min Hu (Connor)
2020-09-09  2:42       ` [dpdk-dev] [PATCH V2 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-09  2:43       ` [dpdk-dev] [PATCH V2 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-09  2:43       ` [dpdk-dev] [PATCH V2 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-08  3:05   ` [dpdk-dev] [PATCH 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-08  3:05   ` [dpdk-dev] [PATCH 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-10  7:24   ` [dpdk-dev] [PATCH V4 0/3] add FEC support Min Hu (Connor)
2020-09-10  7:24     ` [dpdk-dev] [PATCH V4 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-12  4:53       ` Ajit Khaparde
2020-09-16 14:10       ` Ananyev, Konstantin
2020-09-10  7:24     ` [dpdk-dev] [PATCH V4 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-10  7:24     ` [dpdk-dev] [PATCH V4 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-10 21:02     ` [dpdk-dev] [PATCH V4 0/3] add FEC support Ajit Khaparde
2020-09-11  8:39       ` humin (Connor)
2020-09-16 12:37     ` humin (Connor)
2020-09-17  8:23   ` [dpdk-dev] [V5 " Min Hu (Connor)
2020-09-17  8:23     ` [dpdk-dev] [V5 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-17  8:23     ` [dpdk-dev] [V5 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-17  8:23     ` [dpdk-dev] [V5 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-17  8:52   ` [dpdk-dev] [V5 0/3] add FEC support Min Hu (Connor)
2020-09-17  8:52     ` [dpdk-dev] [V5 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-17  9:58       ` Andrew Rybchenko
2020-09-18  9:28         ` Min Hu (Connor)
2020-09-19  8:42           ` Andrew Rybchenko
2020-09-19 12:06             ` Min Hu (Connor)
2020-09-17 12:49       ` Ananyev, Konstantin
2020-09-18  1:57         ` humin (Connor)
2020-09-18 10:46           ` Ananyev, Konstantin
2020-09-17  8:52     ` [dpdk-dev] [V5 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-17  8:52     ` [dpdk-dev] [V5 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-18  9:04   ` [dpdk-dev] [PATCH V6 0/3] add FEC support Min Hu (Connor)
2020-09-18  9:04     ` [dpdk-dev] [PATCH V6 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-18  9:04     ` [dpdk-dev] [PATCH V6 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-18  9:04     ` [dpdk-dev] [PATCH V6 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-18 11:48   ` [dpdk-dev] [PATCH V7 0/3] add FEC support Min Hu (Connor)
2020-09-18 11:48     ` [dpdk-dev] [PATCH V7 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-18 12:13       ` Ananyev, Konstantin
2020-09-18 18:10         ` Ajit Khaparde
2020-09-19  8:44           ` Andrew Rybchenko
2020-09-18 11:48     ` [dpdk-dev] [PATCH V7 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-18 11:48     ` [dpdk-dev] [PATCH V7 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-18 20:35       ` Ajit Khaparde
2020-09-21  2:59   ` [dpdk-dev] [PATCH V8 0/3] add FEC support Min Hu (Connor)
2020-09-21  2:59     ` [dpdk-dev] [PATCH V8 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-21  2:59     ` [dpdk-dev] [PATCH V8 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-21  2:59     ` [dpdk-dev] [PATCH V8 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-21  6:13   ` [dpdk-dev] [PATCH V9 0/3] add FEC support Min Hu (Connor)
2020-09-21  6:13     ` [dpdk-dev] [PATCH V9 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-21 13:39       ` Andrew Rybchenko
2020-09-22  4:58         ` Min Hu (Connor)
2020-09-22  8:02           ` Andrew Rybchenko
2020-09-22 11:06             ` Min Hu (Connor)
2020-09-22 12:18               ` Andrew Rybchenko
2020-09-24 11:07                 ` Min Hu (Connor) [this message]
2020-09-21  6:13     ` [dpdk-dev] [PATCH V9 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-21  6:13     ` [dpdk-dev] [PATCH V9 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-22  7:26   ` [dpdk-dev] [PATCH V10 0/3] add FEC support Min Hu (Connor)
2020-09-22  7:26     ` [dpdk-dev] [PATCH V10 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-22  7:26     ` [dpdk-dev] [PATCH V10 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-22  7:26     ` [dpdk-dev] [PATCH V10 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-24 11:01   ` [dpdk-dev] [PATCH V11 0/4] add FEC support Min Hu (Connor)
2020-09-24 11:01     ` [dpdk-dev] [PATCH V11 1/4] ethdev: introduce FEC API Min Hu (Connor)
2020-09-24 11:01     ` [dpdk-dev] [PATCH V11 2/4] net/hns3: support FEC Min Hu (Connor)
2020-09-24 11:01     ` [dpdk-dev] [PATCH V11 3/4] app/testpmd: add FEC command Min Hu (Connor)
2020-09-24 11:01     ` [dpdk-dev] [PATCH V11 4/4] doc: add FEC API and PMD information Min Hu (Connor)
2020-09-24 13:05   ` [dpdk-dev] [PATCH V12 0/4] add FEC support Min Hu (Connor)
2020-09-24 13:05     ` [dpdk-dev] [PATCH V12 1/4] ethdev: introduce FEC API Min Hu (Connor)
2020-09-24 14:46       ` Andrew Rybchenko
2020-09-25  8:47         ` Min Hu (Connor)
2020-09-25 15:36           ` Ajit Khaparde
2020-09-25 16:12             ` Stephen Hemminger
2020-09-25 16:38               ` Ferruh Yigit
2020-09-24 13:05     ` [dpdk-dev] [PATCH V12 2/4] net/hns3: support FEC Min Hu (Connor)
2020-09-24 13:05     ` [dpdk-dev] [PATCH V12 3/4] app/testpmd: add FEC command Min Hu (Connor)
2020-09-24 13:05     ` [dpdk-dev] [PATCH V12 4/4] doc: add FEC API and PMD information Min Hu (Connor)
2020-09-24 13:52       ` Andrew Rybchenko
2020-09-25  8:39   ` [dpdk-dev] [PATCH V13 0/3] add FEC support Min Hu (Connor)
2020-09-25  8:39     ` [dpdk-dev] [PATCH V13 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-28  7:35       ` Andrew Rybchenko
2020-09-28 11:13         ` Min Hu (Connor)
2020-09-25  8:39     ` [dpdk-dev] [PATCH V13 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-25  8:39     ` [dpdk-dev] [PATCH V13 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-27  7:08     ` [dpdk-dev] [PATCH V13 0/3] add FEC support Min Hu (Connor)
2020-09-28 10:27       ` Ferruh Yigit
2020-09-28 11:11         ` Min Hu (Connor)
2020-09-28 11:08   ` [dpdk-dev] [PATCH V14 " Min Hu (Connor)
2020-09-28 11:08     ` [dpdk-dev] [PATCH V14 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-28 12:48       ` Andrew Rybchenko
2020-09-29  2:09         ` Min Hu (Connor)
2020-09-28 11:08     ` [dpdk-dev] [PATCH V14 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-28 11:08     ` [dpdk-dev] [PATCH V14 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-29  1:03   ` [dpdk-dev] [PATCH V15 0/3] add FEC support Min Hu (Connor)
2020-09-29  1:03     ` [dpdk-dev] [PATCH V15 1/3] ethdev: introduce FEC API Min Hu (Connor)
2020-09-29  4:18       ` Ajit Khaparde
2020-09-29  8:44         ` Min Hu (Connor)
2020-09-30  2:45           ` Min Hu (Connor)
2020-09-30  8:15           ` Thomas Monjalon
2020-09-30  9:45       ` Andrew Rybchenko
2020-09-29  1:03     ` [dpdk-dev] [PATCH V15 2/3] net/hns3: support FEC Min Hu (Connor)
2020-09-29  1:03     ` [dpdk-dev] [PATCH V15 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-09-30 16:52       ` Ferruh Yigit
2020-10-07  0:15         ` humin (Q)
2020-10-07  9:28         ` Ferruh Yigit
2020-10-07 23:38           ` humin (Q)
2020-10-08 10:06           ` Min Hu (Connor)
2020-10-08 10:02   ` [dpdk-dev] [PATCH V16 0/3] add FEC support Min Hu (Connor)
2020-10-08 10:02     ` [dpdk-dev] [PATCH V16 1/3] ethdev: introduce FEC API Min Hu (Connor)
2021-01-15 14:07       ` Ferruh Yigit
2021-01-16  2:03         ` Min Hu (Connor)
2020-10-08 10:02     ` [dpdk-dev] [PATCH V16 2/3] net/hns3: support FEC Min Hu (Connor)
2020-10-08 10:02     ` [dpdk-dev] [PATCH V16 3/3] app/testpmd: add FEC command Min Hu (Connor)
2020-10-08 15:57       ` Ferruh Yigit
2020-10-09  3:48         ` Min Hu (Connor)
2020-10-08 16:28     ` [dpdk-dev] [PATCH V16 0/3] add FEC support Ferruh Yigit

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=dc391949-661e-2317-21b2-a39c5af837a7@huawei.com \
    --to=humin29@huawei.com \
    --cc=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=linuxarm@huawei.com \
    --cc=thomas@monjalon.net \
    /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;
as well as URLs for NNTP newsgroup(s).