Age | Commit message (Collapse) | Author |
|
Fix problems when netlink interfaces are renamed (same ifindex used
for a new interface). Start cleaning up some problems with the way
interface names are handled.
* interface.c: (if_new_intern_ifindex) Remove obsolete function.
(if_delete_update) After distributing the interface deletion message,
set ifp->ifindex to IFINDEX_INTERNAL.
(if_dump_vty) Detect pseudo interface by checking if ifp->ifindex is
IFINDEX_INTERNAL.
(zebra_interface) Check return code from interface_cmd.func.
Do not set internal ifindex values to if_new_intern_ifindex(),
since we now use IFINDEX_INTERNAL for all pseudo interfaces.
* kernel_socket.c: (ifm_read) Fix code and comments to reflect that
all internal interfaces now have ifp->ifindex set to IFINDEX_INTERNAL.
* rt_netlink.c: (set_ifindex) New function used to update ifp->ifindex.
Detects interface rename events by checking if that ifindex is already
being used. If it is, delete the old interface before assigning
the ifindex to the new interface.
(netlink_interface, netlink_link_change) Call set_ifindex to update
the ifindex.
* if.h: Remove define for IFINDEX_INTERNBASE and add define
IFINDEX_INTERNAL 0, since all internal (i.e. non-kernel) pseudo-
interfaces should have ifindex set to 0.
(if_new) Remove function.
(if_delete_retain) New function to delete an interface without
removing from iflist and freeing the structure.
(ifname2ifindex) New function.
* if.c: (if_new) Remove function (absorb into if_create).
(if_create) Replace function if_new with call to calloc.
Set ifp->ifindex to IFINDEX_INTERNAL. Fix off-by-one error
in assert to check length of interface name. Add error message
if interface with this name already exists.
(if_delete_retain) New function to delete an interface without
removing from iflist and freeing the structure.
(if_delete) Implement with help of if_delete_retain.
(ifindex2ifname) Reimplement using if_lookup_by_index.
(ifname2ifindex) New function to complement ifindex2ifname.
(interface) The interface command should check the name length
and fail with a warning message if it is too long.
(no_interface) Fix spelling in warning message.
(if_nametoindex) Reimplement using if_lookup_by_name.
(if_indextoname, ifaddr_ipv4_lookup) Reimplement using
if_lookup_by_index.
* bgp_zebra.c: (bgp_interface_delete) After deleting, set ifp->ifindex
to IFINDEX_INTERNAL.
* isis_zebra.c: (isis_zebra_if_del) Call if_delete_retain instead
of if_delete, since it is generally not safe to remove interface
structures. After deleting, set ifp->ifindex to IFINDEX_INTERNAL.
(zebra_interface_if_lookup) Tighten up code.
* ospf6_zebra.c: (ospf6_zebra_if_del) Previously, this whole function
was commented out. But this is not safe: we should at least update
the ifindex when the interface is deleted. So the new version
updates the interface status and sets ifp->ifindex to
IFINDEX_INTERNAL.
(ospf6_zebra_route_update) Use if_indextoname properly.
* ospf_vty.c: (show_ip_ospf_interface_sub) Show ifindex and interface
flags to help with debugging.
* ospf_zebra.c: (ospf_interface_delete) After deleting, set ifp->ifindex
to IFINDEX_INTERNAL.
(zebra_interface_if_lookup) Make function static. Tighten up code.
* rip_interface.c: (rip_interface_delete) After deleting, set
ifp->ifindex to IFINDEX_INTERNAL.
* ripng_interface.c: (ripng_interface_delete) After deleting, set
ifp->ifindex to IFINDEX_INTERNAL.
|
|
* zserv.c: (zebra_accept) Comment out setting of socket to NONBLOCK
for now, as we dont actually deal with with resending.... See
bugzilla #122, fix from wawa@yandex-team.ru (Vladimir Ivanov).
* kernel_socket.c: (routing_socket) ditto.
|
|
Note two warnings in comments. The serious one is that struct
interface->ifindex probably needs to be signed, ssince we store and
compare to -1.
|
|
* *.c: Change level of debug messages to LOG_DEBUG.
|
|
* global: Replace strerror with safe_strerror. And vtysh/vtysh.c
needs to include "log.h" to pick up the declaration.
|
|
* kernel_socket.c (rtm_flag_dump): terminate buffer with '\0', not '0'.
This is arguably not a security problem, since strlcat is used to copy
to the buffer -gdt.
|
|
* ioctl.h: Add if_ioctl_ipv6 prototype and AF_IOCTL for SOLARIS_IPV6
* kernel_socket.c: Fix SAROUNDUP, compiler doesnt like do..while
RHS in assignments :)
* redistribute.c: (zebra_interface_delete_update) only used
if RTM_IFANNOUNCE and NETLINK is available.
|
|
* kernel_socket.c (kernel_read): Use sockaddr_storage in buffer
for reading kernel messages to ensure enough space (necessary on
Solaris due to sockaddr_dl being large). Thanks to Sowmini
Varadhan for help with this change.
|
|
* kernel_socket.c (ifm_read): Major cleanup. Use Sowmini's code
to find the sockaddr_dl in all cases, narrowing the Solaris ifdef
to just the accomodation of broken kernels. Check sockaddr_dl
carefully up front, and later assume any non-NULL sdl pointer is
valid. Clean up types and variable declarations, and rename
WRAPUP to SAROUNDUP to make the name fit the behavior.
|
|
|
|
catching this.
|
|
* kernel_socket.c (kernel_read): Look up interfaces by index
first, so that state changes which do not include a sockaddr_dl
now work. Add many sanity checks. In
particular, do not assume that a sockaddr_dl follows a message
without checking the ifm_addrs flags, and do not trust the length
in a sockaddr_dl. Add/clarify many comments.
|
|
* zebra/kernel_socket.c: HAVE_IPV6 conditional for WRAPUP when
HAVE_SA_LEN is not defined. bcopy -> memcpy, bcopy is not
portable.
|
|
* zebra/kernel_socket.c: Fix up WRAPUP macro to deal with multiple
address families in the absence of sa_len element in struct
sockaddr.
(ifm_read): Handle solaris 9 if_msghdr_t.
Deal with interfaces which are incomplete, lookup on name rather
than the placeholder interface index of -1.
|
|
* lib/if.c: (if_cmp_func) new function, compare interface names in
alphabetical order.
(if_create) Take name as argument and add interface in sorted order.
(if_get_by_name),(interface_cmd) fixup calls to if_create - see
above.
(if_init) register list comparison function.
* lib/if.h: Add comparison function, modify if_create prototype.
* lib/zclient.c: Modify call to if_create.
* ospfd/ospf_interface.c: (ospf_vl_new) modify call to if_create.
change sprintf to snprintf.
* zebra/kernel_socket.c: (ifm_read) modify call to if_create.
|
|
* zebra/kernel_socket.c: Update for new zebrad global struct
* zebra/ipforward_solaris.c: Add missing privs.h include. Uncomment
/dev/ip define.
* lib/zebra.h: Add typedefs for SunOS.
|
|
* Revert Cougar's sort interface names patch, causes problems with
enabling of interfaces for OSPF in ospfd.
|
|
|
|
* Merge of zebra privileges
|
|
|
|
|
|
|