On Sat, Nov 9, 2013 at 11:33 AM, Gene Cumm <gene.cumm at gmail.com> wrote:> On Sat, Nov 9, 2013 at 11:20 AM, Gene Cumm <gene.cumm at gmail.com> wrote: >> On Fri, Nov 8, 2013 at 5:08 PM, Jason Matthews >> <jason.david.matthews at gmail.com> wrote: >>> I attempted the patch, but had to add a declaration to get it to compile. I >>> also added the gateway like before. Here's a link to the modified diff I >>> used and the pcaps from tftpserver and mirrored port from boot to reset. >>> >>> http://ge.tt/136167y/v/0 >>> >>> I'm also not sure about if I'm building correctly or not. Considering that >>> I get a different syslinux.efi when I compile without making modifications >>> to the source (one that doesn't work with same subnet) makes me wonder if >>> some of my libraries are bad or something. >>> >>> At any rate, thanks for all the help. I think I've learned more trying to >>> figure out what's going on with this than I have in the past year. >> >> Try >> txdata->GatewayAddress = &IPInfo.gateway; >> not >> txdata->GatewayAddress = IPInfo.gateway; > > And with this forced, it does send the requests but it may not route > properly, depending on the gateway. > > The gateway must be NULL if local or the address of the gateway if not local. > > -- > -Gene > >>> On Fri, Nov 8, 2013 at 2:57 PM, H. Peter Anvin <hpa at zytor.com> wrote: >>>> Here is a completely untested patch if someone wants to try and take it >>>> for a spin?core_udp_open() should bind to the local IP address and obtain a local UDP port allocation. core_udp_close() should release the UDP port allocation. core_udp_sendto() knows the remote IP address and remote UDP port and must calculate the GatewayAddress. core_udp_connect() is passed the remote IP address and UDP port, calculates the GatewayAddress and stores all three for core_udp_send(). core_udp_send() should only copy the local/remote IP address/UDP port and GatewayAddress, then set the other flags/values as needed. Now to get core_udp_connect() to calculate/store the values for reuse. -- -Gene
On Sat, Nov 9, 2013 at 1:03 PM, Gene Cumm <gene.cumm at gmail.com> wrote:> On Sat, Nov 9, 2013 at 11:33 AM, Gene Cumm <gene.cumm at gmail.com> wrote: >> On Sat, Nov 9, 2013 at 11:20 AM, Gene Cumm <gene.cumm at gmail.com> wrote: >>> On Fri, Nov 8, 2013 at 5:08 PM, Jason Matthews >>> <jason.david.matthews at gmail.com> wrote: >>>> I attempted the patch, but had to add a declaration to get it to compile. I >>>> also added the gateway like before. Here's a link to the modified diff I >>>> used and the pcaps from tftpserver and mirrored port from boot to reset. >>>> >>>> http://ge.tt/136167y/v/0 >>>> >>>> I'm also not sure about if I'm building correctly or not. Considering that >>>> I get a different syslinux.efi when I compile without making modifications >>>> to the source (one that doesn't work with same subnet) makes me wonder if >>>> some of my libraries are bad or something. >>>> >>>> At any rate, thanks for all the help. I think I've learned more trying to >>>> figure out what's going on with this than I have in the past year. >>> >>> Try >>> txdata->GatewayAddress = &IPInfo.gateway; >>> not >>> txdata->GatewayAddress = IPInfo.gateway; >> >> And with this forced, it does send the requests but it may not route >> properly, depending on the gateway. >> >> The gateway must be NULL if local or the address of the gateway if not local. >> >> -- >> -Gene >> >>>> On Fri, Nov 8, 2013 at 2:57 PM, H. Peter Anvin <hpa at zytor.com> wrote: >>>>> Here is a completely untested patch if someone wants to try and take it >>>>> for a spin? > > core_udp_open() should bind to the local IP address and obtain a local > UDP port allocation. core_udp_close() should release the UDP port > allocation. > > core_udp_sendto() knows the remote IP address and remote UDP port and > must calculate the GatewayAddress. core_udp_connect() is passed the > remote IP address and UDP port, calculates the GatewayAddress and > stores all three for core_udp_send(). core_udp_send() should only > copy the local/remote IP address/UDP port and GatewayAddress, then set > the other flags/values as needed. > > Now to get core_udp_connect() to calculate/store the values for reuse. > > -- > -GenePer UEFI_Spec_2_3_1.pdf p1342, GatewayAddress is only to override the existing routing table. In my opinion, it should never need to be touched. This smells of a broken UEFI implementation on your servers. I guess it's time for a test build that dumps your route table. -- -Gene
On Sat, Nov 9, 2013 at 1:39 PM, Gene Cumm <gene.cumm at gmail.com> wrote:> On Sat, Nov 9, 2013 at 1:03 PM, Gene Cumm <gene.cumm at gmail.com> wrote: >> On Sat, Nov 9, 2013 at 11:33 AM, Gene Cumm <gene.cumm at gmail.com> wrote: >>> On Sat, Nov 9, 2013 at 11:20 AM, Gene Cumm <gene.cumm at gmail.com> wrote: >>>> On Fri, Nov 8, 2013 at 5:08 PM, Jason Matthews >>>> <jason.david.matthews at gmail.com> wrote: >>>>> I attempted the patch, but had to add a declaration to get it to compile. I >>>>> also added the gateway like before. Here's a link to the modified diff I >>>>> used and the pcaps from tftpserver and mirrored port from boot to reset. >>>>> >>>>> http://ge.tt/136167y/v/0 >>>>> >>>>> I'm also not sure about if I'm building correctly or not. Considering that >>>>> I get a different syslinux.efi when I compile without making modifications >>>>> to the source (one that doesn't work with same subnet) makes me wonder if >>>>> some of my libraries are bad or something. >>>>> >>>>> At any rate, thanks for all the help. I think I've learned more trying to >>>>> figure out what's going on with this than I have in the past year. >>>> >>>> Try >>>> txdata->GatewayAddress = &IPInfo.gateway; >>>> not >>>> txdata->GatewayAddress = IPInfo.gateway; >>> >>> And with this forced, it does send the requests but it may not route >>> properly, depending on the gateway. >>> >>> The gateway must be NULL if local or the address of the gateway if not local. >>> >>> -- >>> -Gene >>> >>>>> On Fri, Nov 8, 2013 at 2:57 PM, H. Peter Anvin <hpa at zytor.com> wrote: >>>>>> Here is a completely untested patch if someone wants to try and take it >>>>>> for a spin? >> >> core_udp_open() should bind to the local IP address and obtain a local >> UDP port allocation. core_udp_close() should release the UDP port >> allocation. >> >> core_udp_sendto() knows the remote IP address and remote UDP port and >> must calculate the GatewayAddress. core_udp_connect() is passed the >> remote IP address and UDP port, calculates the GatewayAddress and >> stores all three for core_udp_send(). core_udp_send() should only >> copy the local/remote IP address/UDP port and GatewayAddress, then set >> the other flags/values as needed. >> >> Now to get core_udp_connect() to calculate/store the values for reuse. >> >> -- >> -Gene > > Per UEFI_Spec_2_3_1.pdf p1342, GatewayAddress is only to override the > existing routing table. In my opinion, it should never need to be > touched. > > This smells of a broken UEFI implementation on your servers. I guess > it's time for a test build that dumps your route table.Trudging through more spec docs, I don't understand why StationAddress and SubnetMask are used in place of UseDefaultAddress (which may just alleviate your issue entirely) -- -Gene