{"action":"created","issue":{"url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/152","repository_url":"https://api.github.com/repos/SDL-Hercules-390/hyperion","labels_url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/152/labels{/name}","comments_url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/152/comments","events_url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/152/events","html_url":"https://github.com/SDL-Hercules-390/hyperion/issues/152","id":382134097,"node_id":"MDU6SXNzdWUzODIxMzQwOTc=","number":152,"title":"LCS checksum offload and other assists","user":{"login":"ivan-w","id":1625179,"node_id":"MDQ6VXNlcjE2MjUxNzk=","avatar_url":"https://avatars3.githubusercontent.com/u/1625179?v=4","gravatar_id":"","url":"https://api.github.com/users/ivan-w","html_url":"https://github.com/ivan-w","followers_url":"https://api.github.com/users/ivan-w/followers","following_url":"https://api.github.com/users/ivan-w/following{/other_user}","gists_url":"https://api.github.com/users/ivan-w/gists{/gist_id}","starred_url":"https://api.github.com/users/ivan-w/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ivan-w/subscriptions","organizations_url":"https://api.github.com/users/ivan-w/orgs","repos_url":"https://api.github.com/users/ivan-w/repos","events_url":"https://api.github.com/users/ivan-w/events{/privacy}","received_events_url":"https://api.github.com/users/ivan-w/received_events","type":"User","site_admin":false},"labels":[{"id":1001486173,"node_id":"MDU6TGFiZWwxMDAxNDg2MTcz","url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/labels/Discussion","name":"Discussion","color":"FF9999","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":18,"created_at":"2018-11-19T09:51:54Z","updated_at":"2018-11-27T09:49:23Z","closed_at":null,"author_association":"MEMBER","body":"People,\r\n\r\nI found the following list of issues related to LCS IP Assists : \r\n- LCS has a Query IP Assists command frame but no Set Assists command frame (at least none is defined or known - although I *strongly* believe it's cmd code 0xb3)\r\n- During IP Assists discovery, checksum offload is indicated as supported AND enabled since it is always supported (either by the LCS code or by the TAP driver)\r\n- When determining if the TAP driver can do the offload, it is set on and then off on the TAP device\r\n\r\nThis leads to this situation : If the TAP device can perform IP/TCP/UDP Checksum offloading, the LCS will report that  it is supported and enabled but the TAP device will be setup NOT to perform checksum offloading. When this occurs and the network stack using the LCS queries IP assists, finds that checksum offloading is supported and enabled, that network stack will forego calculating checksums, but NO ONE WILL either - the packet will go out on the network without any checksum and will be dropped eventually at some point.\r\n\r\nThe solution is either : \r\n- To leave checksum offload enabled at the TAP level when it is found to be supported\r\n- To leave the offload enabled when it is checked at the TAP level\r\n- To never use the TAP checksum offload (and always use the in-house version instead - but this leads to the next problem)\r\n\r\nNow... If the TAP checksum offload is disabled, you cannot enable the TAP TCP Segment Offload (TSO) feature! It's an intricate trick in how the TUNSETOFFLOAD IOCTL handles the command code (it's a bit naive really in the tuntap linux code)\r\n\r\nHowever, you CANNOT forcibly enable TSO (A network stack that is not TSO aware will barf on receiving frames that are way larger than the LAN packet size) - so without a means to enable it, it is completely useless.\r\n\r\nSo, for the time being\r\n- I am selecting to enable TAP checksum offload (if possible) (it won't hurt.. at worst, the checksum will be computed multiple times on output and frames with bad CRC blocked on TAP ingress).\r\n- Disable TSO (It may still be checked and reported as supported, but won't be reported as enabled by the LCS not enabled at the TAP level).\r\n\r\nPatch to follow"},"comment":{"url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/comments/441995191","html_url":"https://github.com/SDL-Hercules-390/hyperion/issues/152#issuecomment-441995191","issue_url":"https://api.github.com/repos/SDL-Hercules-390/hyperion/issues/152","id":441995191,"node_id":"MDEyOklzc3VlQ29tbWVudDQ0MTk5NTE5MQ==","user":{"login":"mcisho","id":1387091,"node_id":"MDQ6VXNlcjEzODcwOTE=","avatar_url":"https://avatars1.githubusercontent.com/u/1387091?v=4","gravatar_id":"","url":"https://api.github.com/users/mcisho","html_url":"https://github.com/mcisho","followers_url":"https://api.github.com/users/mcisho/followers","following_url":"https://api.github.com/users/mcisho/following{/other_user}","gists_url":"https://api.github.com/users/mcisho/gists{/gist_id}","starred_url":"https://api.github.com/users/mcisho/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mcisho/subscriptions","organizations_url":"https://api.github.com/users/mcisho/orgs","repos_url":"https://api.github.com/users/mcisho/repos","events_url":"https://api.github.com/users/mcisho/events{/privacy}","received_events_url":"https://api.github.com/users/mcisho/received_events","type":"User","site_admin":false},"created_at":"2018-11-27T09:49:23Z","updated_at":"2018-11-27T09:49:23Z","author_association":"NONE","body":"Just the thing. I must just add that netsupp.c's checksum functions are very inefficient, all those ntons are completely unnecessary (see RFC 1071). And why on earth doesn't is support IPv6? And why on earth only ethernet frames? "}}
{"actor":{"display_login":"mcisho"}}