code: def update_global_table(self, prefix, next_hop=None, is_withdraw=False):
          
          src_ver_num = 1
          peer = None
          # set mandatory path attributes
          origin = BGPPathAttributeOrigin(BGP_ATTR_ORIGIN_IGP)
          aspath = BGPPathAttributeAsPath([[]])
  
          pathattrs = OrderedDict()
          pathattrs[BGP_ATTR_TYPE_ORIGIN] = origin
          pathattrs[BGP_ATTR_TYPE_AS_PATH] = aspath
  
          net = netaddr.IPNetwork(prefix)
          addr = str(net.ip)
          masklen = net.prefixlen
          if ip.valid_ipv4(addr):
              _nlri = IPAddrPrefix(masklen, addr)
              if next_hop is None:
                  next_hop = '0.0.0.0'
              p = Ipv4Path
          else:
              _nlri = IP6AddrPrefix(masklen, addr)
              if next_hop is None:
                  next_hop = '::'
              p = Ipv6Path
  
          new_path = p(peer, _nlri, src_ver_num,
                       pattrs=pathattrs, nexthop=next_hop,
                       is_withdraw=is_withdraw)
  
          # add to global table and propagates to neighbors
          self.learn_path(new_path)
docs: Update a BGP route in the Global table for the given `prefix`
          with the given `next_hop`.
  
          If `is_withdraw` is False, which is the default, add a BGP route
          to the Global table.
          If `is_withdraw` is True, remove a BGP route from the Global table.