A method operable by a satellite of a Non-Geostationary Satellite Orbit, NGSO, system, the method comprising: receiving a plurality of backbone route tables from a ground controller, wherein each of the backbone route tables defines a snapshot of a time-varying backbone topology of the NGSO system ; receiving one or more user route tables from the ground controller, wherein the user route tables identify connectivity of users to satellites in the NGSO system ; receiving a data packet for routing in the NGSO system ; determining, based on the user route tables, if the data packet is destined for a first user directly connected to another satellite in the NGSO system ; responsive to determining that the data packet is destined for the first user, performing the steps of: identifying the other satellite based on the user route tables ; identifying an active backbone route table from the plurality of backbone route tables ; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table ; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite ; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite . receiving a plurality of backbone route tables from a ground controller, wherein each of the backbone route tables defines a snapshot of a time-varying backbone topology of the NGSO system ; receiving one or more user route tables from the ground controller, wherein the user route tables identify connectivity of users to satellites in the NGSO system ; receiving a data packet for routing in the NGSO system ; determining, based on the user route tables, if the data packet is destined for a first user directly connected to another satellite in the NGSO system ; responsive to determining that the data packet is destined for the first user, performing the steps of: identifying the other satellite based on the user route tables ; identifying an active backbone route table from the plurality of backbone route tables ; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table ; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite ; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite . identifying the other satellite based on the user route tables ; identifying an active backbone route table from the plurality of backbone route tables ; and forwarding the data packet to the other satellite over an inter-orbit link or an intra-orbit link based on the active backbone route table ; and determining, based on the user route tables, if the data packet is destined for a second user directly connected to the satellite ; and responsive to determining that the data packet is destined for the second user, transmitting the data packet to the second user over a user-link maintained by the satellite . <EOS>