Gary Winiger wrote:
>> I am sending the updated spec with respect to Gary's issue.
>>
>
> I'm still confused on how changing the size of structures
> is mitigated in a patch release. What am I misunderstanding?
>
The IPFILTER_VERSION (see ipnat(7i)) is used to keep track of user
application's version thus the old binaries can still work after this
change. The kernel code would handle the ioctl input/output based on the
version number to make it a compatible change. Those are all
implementation changes and there's no change required for user
applications using the interfaces, either using the old binaries or
recompiling with the new header files.
> Further I don't see any expression of the interface stability
> in the updated spec. Did I miss that also?
>
There is no new interface exported in this case. The one-pager comment
states that stability levels are required for new exported interface.
Correct me if I was wrong. The stabilities (External Stable) of
ipnat(7i) and the header files are defined in:
[3] PSARC 2005/233 IPFilter API for NAT entry duplicate detection
Yifan
> Gary..
>
>>> I'm not sure what "External Stable" is, so I'll take it as the
>>> former Stable which is the current Committed. And I'll ask again:
>>> "How is the incompatible change mitagated for the requested Patch
>>> release binding?"
>>>
>
>
>> ioctls
>> ------
>> For ioctl SIOCGNATL, the structure "natlookup_t" has been changed to be able
>> to
>> contain IPv6 addresses. A new member "nl_v" is added to specify whether it is
>> looking for an IPv4 or an IPv6 NAT session. For compatibilities, IPv4 NAT
>> session
>> lookup doesn't need to assign "nl_v". See ipnat(7i).
>>
>> For ioctl SIOCSTPUT, A new member "nat_v" is added to the structure "nat_t"
>> to
>> specify whether it is inserting an IPv4 or an IPv6 NAT session. For
>> compatibilities,
>> inserting an IPv4 NAT session doesn't need to assign "nat_v". See ipnat(7i).
>>
>
>
>> @@ -67,9
>> * Structure used with SIOCGNATL.
>> */
>> typedef struct natlookup {
>> - struct in-addr nl_inip;
>> - struct in_addr nl_outip;
>> - struct in_addr nl_realip;
>> + i6addr_t nl_inipaddr;
>> + i6addr_t nl_outipaddr;
>> + i6addr_t nl_realipaddr;
>> + int nl_v;
>> int nl_flags;
>> u_short nl_inport;
>> u_short nl_outport;
>> @@ -76,6 +77,13 @@
>> u_short nl_realport;
>> } natlookup_t
>>
>> +#define nl_inip nl_inipaddr.in4
>> +#define nl_outip nl_outipaddr.in4
>> +#define nl_realip nl_realipaddr.in4
>> +#define nl_inip6 nl_inipaddr.in6
>> +#define nl_outip6 nl_outipaddr.in6
>> +#define nl_realip6 nl_realipaddr.in6
>> +
>> /*
>> * Accepted values for nl_flags
>> */
>> @@ -169,6 +177,7 @@
>> int nat_hv[2];
>> char nat_ifnames[2][LIFNAMSIZ];
>> int nat_rev;
>> + int nat_v;
>> } nat_t;
>>
>> #define nat_inip nat_inip6.in4
>>